C# 如何使sql select动态字符串比较正常工作?

C# 如何使sql select动态字符串比较正常工作?,c#,sql,wpf,datagrid,string-comparison,C#,Sql,Wpf,Datagrid,String Comparison,我正在尝试从wpf datagrid单击的单元格中获取正确的字符串,我将在sql select语句中使用该单元格,并将其发送到第二个wpf datagrid。 当输入静态字符串值时,它将起作用,但不会从动态字符串中起作用。我的代码有什么问题 private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { DataRowView row = (

我正在尝试从wpf datagrid单击的单元格中获取正确的字符串,我将在sql select语句中使用该单元格,并将其发送到第二个wpf datagrid。 当输入静态字符串值时,它将起作用,但不会从动态字符串中起作用。我的代码有什么问题

    private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
        DataRowView row = (DataRowView)dataGrid1.SelectedItems[0];
        string barcode_string = row["BarCode"].ToString();

        //string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = '" + barcode_string + "'";
        string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = 'L002BO4'";
    }
当在sql语句中输入字符串时,它就像一个符咒,但我当然也希望从大型数据库工作中返回动态字符串。

您可以尝试下面的方法吗

 string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = "+ barcode_string;
您在最后一次查询中遗漏了一个
。请尝试此操作

    string barcode_detail = "SELECT BarCode, PCBGUID 
       FROM TB_AOIResult WHERE
          BarCode = "+"\'" +barcode_string + "\'";

请不要在SQL语句中连接字符串。请使用参数。检查数据库中条形码列的正确数据类型

    private void DataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
        DataTable dt = new DataTable();
        DataRowView row = (DataRowView)dataGrid1.SelectedItems[0];
        string barcode_string = row["BarCode"].ToString();

        //string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = '" + barcode_string + "'";
        string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = @BarCode;";
        using (SqlConnection cn = new SqlConnection("Your connection string")) 
        {
            SqlCommand cmd = new SqlCommand(barcode_detail, cn);
            cmd.Parameters.Add("@BarCode", System.Data.SqlDbType.VarChar).Value = barcode_string;
            cn.Open();
            dt.Load(cmd.ExecuteReader());
            //use the data in the data table
        }
    }
编辑 测试字符串。使用System.Diagnostics添加
,以使用
Debug.Print

        String literal = "L002BO4";
        String variable = row["BarCode"].ToString();
        if (literal.Length == variable.Length)
            Debug.Print("The length of the strings match");
        else
            Debug.Print("The lengths do not match");
        Char[] variableArray = variable.ToCharArray();
        Char[] literalArray = literal.ToCharArray();
        for (int index =0; index<literalArray.Length; index++)
        {
            if (variableArray[index] == literalArray[index])
                Debug.Print($"index {index} matches");
            else
                Debug.Print($"index {index} does not match");
        }
String literal=“L002BO4”;
字符串变量=行[“条形码”]。ToString();
if(literal.Length==variable.Length)
打印(“字符串的长度匹配”);
其他的
调试。打印(“长度不匹配”);
Char[]variableArray=variable.ToCharArray();
Char[]literalArray=literal.ToCharArray();

对于(int index=0;indexI忘记提及字符串barcode_string=row[“barcode”]。ToString();返回L002BO4,正如我所希望的。您从数据库中查找的动态字符串排序是作为注释启动并运行的查询,或者是作为变量发送输入的动态,这意味着不手动输入。您是指在调试时,您是否获得了预期值的条形码字符串?我忘了提及该字符串栏code_string=row[“BarCode”]。ToString();返回L002BO4,就像我想要的一样。string BarCode_detail=“SELECT BarCode,PCBGUID FROM TB_airesult,其中BarCode=”“+BarCode_string+”””;不起作用。您看到打印同一条语句时的输出了吗?不,很抱歉,这不是正确的语法。string BarCode_detail=”选择BarCode,PCBGUID FROM TB_AOIResult WHERE BarCode=“+”“BarCode\u string+”;“哎呀,我错过了
++
你能现在检查一下吗?不,对不起,这不起作用。string BarCode\u detail=“SELECT BarCode,PCBGUID FROM TB_AOIResult WHERE BarCode=“+”“+BarCode\u string+””“我不知道你在说什么。我想做一个字符串比较。做对它有多难?我以前做过几千次,但在这种情况下它不起作用。怎么了?”Mattiasturebrand“不知道你在说什么。”好吧,这就是我们两个人。我已将错误隔离到表达式:string barcode_string=row[“barcode”]。ToString();它似乎返回一个L002BO4字符串,但不像您声明的字符串barcode_string=“L002BO4”那么有什么问题吗???试试看
.Trm
可能会有不可见的空白。请给我一个例子好吗?我想你会让我使用字符串的修剪表达式?你能试着像这样使用-->字符串barcode\u detail=“SELECT barcode,PCBGUID FROM TB\u AOIResult,其中barcode=N''barcode\u string''”;