小编ygo*_*goe的帖子

保持字符串在数据库中不区分大小写唯一

我想确保当用户想要在我的系统(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

sql database unique case-insensitive

2
推荐指数
1
解决办法
2785
查看次数

看门狗阻止函数调用

我有一个用于查询该传感器的硬件传感器的闭源API.API来自我通过C#interop使用的DLL.API的功能是阻塞的.它们通常会返回错误值,但在某些情况下它们不会返回.

我需要能够检测到这种情况,并在这种情况下杀死被阻止的线程.如何在C#中完成?

他们被调用的线程是通过BackgroundWorker创建的.我正在寻找一个简单的看门狗来阻止函数调用,我可以在调用函数之前设置它,并在我回来时重置.应该坐在那里等我回来.如果我没有,它将杀死线程,以便1)API再次释放,我的应用程序的任何线程仍然闲逛并做任何事情,如果它最终返回和2)我可以采取其他恢复措施,如重新初始化API以继续使用它.

c# multithreading watchdog

2
推荐指数
1
解决办法
1139
查看次数

通过绑定值选择控件样式

我有一个编辑器视图,可用于多个编辑对象.多个对象的视图模型为每个需要处理的字段提供类型为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,如何为控件设置某种样式?

data-binding wpf triggers

2
推荐指数
1
解决办法
2283
查看次数

获取WPF TextBox的滚动位置

我需要在WPF TextBox控件的内容中添加一些装饰.基本上工作正常,我可以获得指定字符索引的位置,并相应地布局我的其他元素.但是当TextBox滚动时,它都会中断.我的布局位置不再与显示的文本匹配,因为它已移动到其他位置.

现在,我很惊讶TextBox类没有提供有关其滚动状态的任何信息,也没有提供滚动更改时的任何事件.我现在能做什么?

我使用Snoop来确定是否有一些我可以问的滚动子元素,但ScrollContentPresenter也没有任何可用的滚动信息.我真的很想把我的装饰元素放到滚动区域,这样滚动也会影响它们,但是只能有一个内容控件,而且它已经是TextBox内部的一个.

wpf scroll textbox

2
推荐指数
1
解决办法
3730
查看次数

从 PowerShell 执行控制台应用程序

在本身就是控制台应用程序的 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 中还有其他解决方案吗?

powershell

2
推荐指数
1
解决办法
5948
查看次数

与DrawingContext.DrawText垂直对齐

我需要将文本垂直对齐到顶部或底部或中心.有水平对齐的FormattedText.TextAlignment属性,但没有垂直对齐的属性.

要明确Google不理解的内容:我对旋转文本垂直流动不感兴趣.我知道该怎么做.我只想让(可能是多行)文本在中心点的上方或下方或中间对齐.

谁知道怎么做?

wpf text alignment drawingcontext

2
推荐指数
1
解决办法
2738
查看次数

如何在 Android 上使用 .NET MAUI 的 BroadcastReceiver?

我有来自为 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)

.net android maui

2
推荐指数
1
解决办法
5623
查看次数

从XML元素中读取空格字符

这一个非常简单的问题!:-)有一个像这样的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但没有帮助.

.net c# xml whitespace

1
推荐指数
1
解决办法
1673
查看次数

在TextBlock中对齐TextBox

我想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怎么样?

.net wpf

1
推荐指数
1
解决办法
802
查看次数

使用其他命令修改 awk 参数

我有一个这样的文件,其中包含行中的多个字段。我想显示其中一些,同时用另一个命令处理其中一个。

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,我之前已经这样做了,所以这不是问题的一部分。

awk

1
推荐指数
1
解决办法
77
查看次数