我想确保当用户想要在我的系统(Web 应用程序)中注册用户名时,即使不考虑大小写,用户名也是唯一的。因此,如果名为“SuperMan”的用户已经注册,则不得允许其他用户注册为“superman”或“SUPERman”。必须在数据库级别检查这一点。
\n\n在我当前的实现中,我执行以下操作:
\n\n\nselect count(*) from user where lower(name) = lower(?) for update;\n-- 如果计数大于 0,则错误中止\n-- 确定用户的新 ID\n插入转换为用户 (id, name, \xe2\x80\xa6) 值 (?, ?, \xe2\x80\xa6);\n\n\n
我不确定“for update”是否会将数据库锁定得足够远,以便其他用户无法使用上述两个 SQL 语句之间的无效名称进行注册。可能这不是 100% 安全的解决方案。不幸的是我不能在 SQL 中使用唯一键,因为它们只会区分大小写进行比较。
\n\n还有其他解决方案吗?为了增加更多的安全性,下面的怎么样?
\n\n\nselect count(*) from user where lower(name) = lower(?) for update;\n-- 如果计数大于 0,则错误中止\n-- 确定用户的新 ID\n插入进入用户 (id, name, \xe2\x80\xa6) 值 (?, ?, \xe2\x80\xa6);\n-- 现在再次计数\n从用户中选择 count(*),其中 lower(name) = lower (?);\n-- 如果计数现在大于 1,请执行以下操作:\n从 id = ? 的用户中删除;\n-- 或者回滚事务\n\n
我有一个用于查询该传感器的硬件传感器的闭源API.API来自我通过C#interop使用的DLL.API的功能是阻塞的.它们通常会返回错误值,但在某些情况下它们不会返回.
我需要能够检测到这种情况,并在这种情况下杀死被阻止的线程.如何在C#中完成?
他们被调用的线程是通过BackgroundWorker创建的.我正在寻找一个简单的看门狗来阻止函数调用,我可以在调用函数之前设置它,并在我回来时重置.应该坐在那里等我回来.如果我没有,它将杀死线程,以便1)API再次释放,我的应用程序的任何线程仍然闲逛并做任何事情,如果它最终返回和2)我可以采取其他恢复措施,如重新初始化API以继续使用它.
我有一个编辑器视图,可用于多个编辑对象.多个对象的视图模型为每个需要处理的字段提供类型为bool的Field1Multiple属性.在这种情况下,它现在只是ComboBox控件.每当为该字段指示多个不同的值时,应该对App.xaml中定义的该控件应用某种样式.该样式更改了控件的背景,以显示此处没有可显示的单个值.
我试过这个XAML代码:
<ComboBox
ItemsSource="{Binding Project.Field1Values}" DisplayMemberPath="DisplayName"
SelectedItem="{Binding Field1}">
<ComboBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Field1Multiple}" Value="true">
<Setter
Property="ComboBox.Style"
Value="{StaticResource MultiValueCombo}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为我无法在Style中设置Style属性.如果我直接在控件上使用触发器,可能只有EventTriggers,没有DataTriggers,编译器说.
如何根据绑定值设置控件的样式?或者,如果绑定值为true,如何为控件设置某种样式?
我需要在WPF TextBox控件的内容中添加一些装饰.基本上工作正常,我可以获得指定字符索引的位置,并相应地布局我的其他元素.但是当TextBox滚动时,它都会中断.我的布局位置不再与显示的文本匹配,因为它已移动到其他位置.
现在,我很惊讶TextBox类没有提供有关其滚动状态的任何信息,也没有提供滚动更改时的任何事件.我现在能做什么?
我使用Snoop来确定是否有一些我可以问的滚动子元素,但ScrollContentPresenter也没有任何可用的滚动信息.我真的很想把我的装饰元素放到滚动区域,这样滚动也会影响它们,但是只能有一个内容控件,而且它已经是TextBox内部的一个.
在本身就是控制台应用程序的 PowerShell 脚本中,我需要执行另一个具有任意名称、参数、无流重定向的控制台应用程序,并获得正确的返回代码。
这是我当前的代码:
$execFile = "C:\Path\To\Some.exe"
$params = "arg1 arg2 /opt3 /opt4"
# Wait until the started process has finished
Invoke-Expression ($execFile + " " + $params + " | Out-Host")
if (-not $?)
{
# Show error message
}
Run Code Online (Sandbox Code Playgroud)
它可以使用正确的参数启动 Win32 应用程序(空格分隔参数,并非所有内容都进入 argv[1])。但是返回码好像丢了,还重定向了控制台流。那是行不通的。
另一个代码也是错误的:
& $execFile $params
if (-not $?)
{
# Show error message
}
Run Code Online (Sandbox Code Playgroud)
当这获取返回码并等待进程完成时,它将所有参数放入 argv[1] 并且执行的进程无法使用该垃圾输入。
PowerShell 中还有其他解决方案吗?
我需要将文本垂直对齐到顶部或底部或中心.有水平对齐的FormattedText.TextAlignment属性,但没有垂直对齐的属性.
要明确Google不理解的内容:我对旋转文本垂直流动不感兴趣.我知道该怎么做.我只想让(可能是多行)文本在中心点的上方或下方或中间对齐.
谁知道怎么做?
我有来自为 Xamarin.Android(不是 Forms)编写的示例应用程序的现有代码。我需要在为 .NET MAUI(所有 Xamarin 的继承者)编写的新应用程序中使用它。它使用 BroadcastReceiver 来了解 USB 设备何时与手机分离。但这在毛伊岛不起作用。
这是旧代码:
public partial class MainPage : ContentPage
{
private BroadcastReceiver detachedReceiver;
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
OnScanClicked(this, EventArgs.Empty);
// TODO: Fix for MAUI
//register the broadcast receivers
detachedReceiver = new UsbDeviceDetachedReceiver(this);
RegisterReceiver(detachedReceiver, new IntentFilter(UsbManager.ActionUsbDeviceDetached));
}
protected override void OnDisappearing()
{
base.OnDisappearing();
CloseDevice();
// TODO: Fix for MAUI
var temp = detachedReceiver; // copy reference for thread safety
if (temp != null)
UnregisterReceiver(temp);
} …
Run Code Online (Sandbox Code Playgroud) 这一个非常简单的问题!:-)有一个像这样的XML文件:
<xml>
<data> </data>
</xml>
Run Code Online (Sandbox Code Playgroud)
现在我需要准确读出<data>
元素中的任何内容.无论是U + 0020这样的单一空白.我天真的猜测:
XmlDocument xd = new XmlDocument();
xd.Load(fileName);
XmlNode xn = xd.DocumentElement.SelectSingleNode("data");
string data = xn.InnerText;
Run Code Online (Sandbox Code Playgroud)
但是返回一个空字符串.白色空间迷失了.任何其他数据都可以读得很好.
我需要做些什么来获得我的空间角色?
浏览网页一段时间后,我尝试用XmlReader读取XML文件,让我设置XmlReaderSettings.IgnoreWhitespace = false
但没有帮助.
我想TextBox
在包装文本的中间显示一个带有控件的短句,用户应在其中输入一个值.我不确定这样做是否是个好主意:
<TextBlock TextWrapping="Wrap">
<Run Text="Keep at least"/>
<TextBox Width="30" Margin="4,0"/>
<Run Text="MB free on the drive"/>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
但它工作并将输入字段与文本一起包装.不幸的TextBox
是,基线与文本对齐,而不是居中.这意味着输入框中的文本与其周围的标签不在同一高度.明显的垂直对齐属性对我没有帮助.
有没有解决方案,或者完全不同的方法?
HTML可以做到这一点,WPF怎么样?
我有一个这样的文件,其中包含行中的多个字段。我想显示其中一些,同时用另一个命令处理其中一个。
TITLE,OpenVPN ...
HEADER,CLIENT_LIST,Common Name,Real Address,Virtual Address,Virtual IPv6 Address,Bytes Received,Bytes Sent,Connected Since,Connected Since (time_t),Username,Client ID,Peer ID
CLIENT_LIST,name1,1.1.1.1:1,10.0.0.1,,2692253,3765861,Wed Jun 23 12:51:08 2021,1624452668,name1,4727,0
CLIENT_LIST,name2,2.2.2.2:2,10.0.0.2,,1571221,2080242,Thu Jul 1 19:24:10 2021,1625167450,name2,5625,0
CLIENT_LIST,name3,3.3.3.3:3,10.0.0.3,,2670410,3736957,Wed Jun 23 16:20:51 2021,1624465251,name3,4747,0
...
Run Code Online (Sandbox Code Playgroud)
预期的输出是这样的:
name1 10.0.0.1 2021-06-23 12:51:08
name2 10.0.0.2 2021-07-01 19:24:10
name3 10.0.0.3 2021-06-23 16:20:51
Run Code Online (Sandbox Code Playgroud)
我现在的命令是这样的:
grep '^CLIENT_LIST,' /var/run/ovpn-server.status |awk -F',' '{print $2 $4 $9}' |sort
Run Code Online (Sandbox Code Playgroud)
它打印所需的字段,但不会将时间戳转换为格式化的时间。这是命令:
date -d @1624452668 +"%Y-%m-%d %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)
如何将date
命令集成到awk
脚本中?或者还有什么其他解决方案可以实现这一目标?
我还打算使用命令将输出放入列/表布局中column
,我之前已经这样做了,所以这不是问题的一部分。