1

为什么我的参数化变量没有被添加到我的 Sql 查询中?

我有两个combobox.text由最终用户选择的参数化变量。

尝试使用使用参数化变量的查询时出现以下错误。

附加信息:必须声明标量变量“@username”

我错过了什么吗?

示例查询

  SQL = "SELECT stationID, LocationName, plandate, username, status  FROM dbo.joblist WHERE username = @username and status = @status";

代码片段

            //Decide what query
            String SQL = SQLSelection();
            //Connection String
            String ConnString = "Data Source=dbsqlexpress; Provider=SQLOLEDB; Initial Catalog=Data; User ID=mobile; Password=PW";
            //Create  and initalize Oledbconnection object and pass connection string into it.
            OleDbConnection con = new OleDbConnection(ConnString);

            //open connection to database
            con.Open();

           //create adapter that sits inbetween dataset and datbase
            OleDbDataAdapter adapter = new OleDbDataAdapter();

            adapter.SelectCommand = new OleDbCommand(SQL,con);
            adapter.SelectCommand.Parameters.Add("@username", OleDbType.VarChar).Value = auditorCmb.Text;
            adapter.SelectCommand.Parameters.Add("@status", OleDbType.VarChar).Value = statusCmb.Text;


            //Create dataset
            DataSet dataset = new DataSet();

            using (DataTable dt = new DataTable())
            {
                adapter.Fill(dt);
                dataGridView1.AutoResizeColumns();
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

                con.Close();
                dataGridView1.DataSource = dt;

            int rowCount = rowCount = dt.Rows.Count;
            label10.Text = rowCount.ToString("n0");
            }




        }
4

2 回答 2

4

对于 OLE DB(和 ODBC),您需要?在 SQL 语句中指定为参数标记。然后将这些按序映射,根据顺序参数分别映射到集合。

SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE username = ? and status = ?;";

避免在 .NET 应用程序中使用 OLE DB 和 ODBC。(.Net Provider for SQL Server又名 SqlClient)将从 .Net 应用程序中提供更好的性能。此外,Microsoft 已宣布弃用 OLE DB,以便在 SQL Server 中访问关系数据库。

于 2015-03-22T21:06:11.640 回答
1

当 CommandType 设置为 Text 时,OLE DB .NET 提供程序不支持将参数传递给 SQL 语句或由 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

MSDN:OleDbCommand.Parameters 属性

于 2015-03-22T21:09:05.053 回答