关于OLEDB参数化查询【.net】

来源:互联网 发布:剑网三脸型数据清洗 编辑:程序博客网 时间:2024/06/07 05:21
 

使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序。OLEDB、SqlClient 和 Oracle 提供程序全部使用不同的语法。例如,用于命名和指定参数的 SQL 语法使用 @ 符号,OLEDB 参数语法需要使用问号 (?) 作为参数占位符,而 Oracle 提供程序使用冒号 (:)。 

string sqlstr = " select * from table where id=@id and name=@name ";
System.Data.SqlClient.SqlParameter parameters = newSystem.Data.SqlClient.SqlParameter[2];
parameters[0] = new SqlParameter("@id", uid);
parameters[1] = new SqlParameter("@name", name);

 

string sqlstr = " select * from table where id=? and name=? ";
System.Data.OleDb.OleDbParameter parameters = new System.Data.OleDb.OleDbParameter[2];
parameters[0] = new OleDbParameter("id", uid);
parameters[1] = new OleDbParameter("name", name);

 

string sqlstr = " select * from table where id=:id and name=:name ";
System.Data.OracleClient.OracleParameter parameters = new System.Data.OracleClient.OracleParameter[2];
parameters[0] = new OracleParameter(":id", uid);
parameters[1] = new OracleParameter(":name", name);

 

在通过OLEDB传递参数时候需要注意的问题

对于ACCESS数据库 可以是‍cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(@sn,@sadd)";

但是对于SQL数据库 就是cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(?,?)";

而且在ACCESS中对于传递的参数的添加顺序 即使给出变量名 也必须和SQL语句调用的顺序一致 否则会出错

比如

‍            cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(@sn,@sadd)";
            cmd.Parameters.Clear();

            p = new OleDbParameter();
            p.ParameterName = "@sn"; p.OleDbType = OleDbType.Char; p.Value = sn;
            cmd.Parameters.Add(p);

            p = new OleDbParameter();
            p.ParameterName = "@sadd"; p.OleDbType = OleDbType.Char; p.Value = sadd;
            cmd.Parameters.Add(p);

因为语句中Values(@sn,@sadd)

@sn在@sadd之前 如果你在写参数的时候把‍@sn‍和@sadd的顺序写反 那么传递的参数也会反过来 即使你的‍p.ParameterName定义准确了也一样

原创粉丝点击