C# OleDbDataAdapter字符串串联

C# OleDbDataAdapter字符串串联,c#,string,concatenation,oledb,oledbdataadapter,C#,String,Concatenation,Oledb,Oledbdataadapter,我有下面的代码,它对数据库执行简单的SELECT查询。如果我通过“group”字符串传递整个查询,查询就可以了。但是如果我尝试按如下方式连接字符串(仅发送组ID),我会得到“查询表达式'ID='group_data'中的语法错误”-请注意这三个' 我在MSDN上看到了一个高峰,但我找不到任何与之相关的东西 public void auth_st(string group) { conexiuneBD.Open(); DataSet ds = new Dat

我有下面的代码,它对数据库执行简单的SELECT查询。如果我通过“group”字符串传递整个查询,查询就可以了。但是如果我尝试按如下方式连接字符串(仅发送组ID),我会得到“查询表达式'ID='group_data'中的语法错误”-请注意这三个'

我在MSDN上看到了一个高峰,但我找不到任何与之相关的东西

public void auth_st(string group)
    {
        conexiuneBD.Open();
        DataSet ds = new DataSet();
        OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT Notif FROM teams WHERE ID='"+group+"'", conexiuneBD);
        adapter.Fill(ds);
        conexiuneBD.Close();

        DataTable dt = ds.Tables[0];
        foreach (DataRow dr in dt.Rows)
        {
            listBoxCerer.Items.Add(dr["Notif"].ToString());

        }

    }
非常感谢您的帮助。我应该改用command吗?

字符串连接是,您应该使用以下方式:

public void auth_st(string group)
{
    string query="SELECT Notif FROM teams WHERE ID='{0}'";
    conexiuneBD.Open();
    DataSet ds = new DataSet();
    OleDbDataAdapter adapter = new OleDbDataAdapter(string.Format(query,group), conexiuneBD);
    adapter.Fill(ds);
    conexiuneBD.Close();

    DataTable dt = ds.Tables[0];
    foreach (DataRow dr in dt.Rows)
    {
        listBoxCerer.Items.Add(dr["Notif"].ToString());

    }

}
public void auth_st(string group)
{
    conexiuneBD.Open();
    DataSet ds = new DataSet();
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT Notif FROM teams WHERE ID=?", conexiuneBD);
    adapter.SelectCommand.Parameters.AddWithValue("p1", group);
    adapter.Fill(ds);
    conexiuneBD.Close();

    DataTable dt = ds.Tables[0];
    foreach (DataRow dr in dt.Rows)
    {
        listBoxCerer.Items.Add(dr["Notif"].ToString());
    }
}

嗯,听起来像是
ID
是数字类型,而不是字符。您尝试过不使用单引号吗?您的id是varchar还是int?id是字符串(它包含类似“331C”的内容)连接参数绝对不是执行查询的正确方法。使用参数更好:请查看另一个以获得示例。
group
的值到底是多少?我在查询中没有看到任何语法错误。如果group=“331C”I get“query expression'ID='331C'中的语法错误”@user3605321您确定从ID='331C'所在的团队中选择Notif时出现错误吗?query?确定将查询文本放入一个变量中,并将其传递给oledbdataadapter()和调试代码,并将查询变量文本粘贴到此处。我尝试了此操作。我只收到一条带有错误的消息,并且仅在调试窗口中出现此错误。System.Data.OleDb.OleDbException类型的第一次机会异常出现在System.Data.dll中System.Data.OleDb.OleDbException类型的第一次机会异常出现在System.windows.Forms.dll线程0x中fb0已退出,代码为259(0x103)。线程0xebc已退出,代码为259(0x103)。谢谢你,多亏你的帮助,我终于让它工作了!我会记住你的建议,你是一个救生员!我真诚地祝你一天愉快!谢谢你接受:)我添加了一个链接(在“非常糟糕”中)这就解释了SQL注入以及为什么SQL参数的串联是不好的。