none
企业库使用OLEDB方式操作数据库时无法对SQL参数赋值 RRS feed

  • 问题

  • public void Insert(int col1, string col2)
    {
     Database db = DatabaseFactory.CreateDatabase();
     string sql = @"INSERT INTO T1(COL1,COL2) VALUES (@COL1,@COL2)";
     DbCommand cmd = db.GetSqlStringCommand(sql);
     db.AddInParameters(cmd,"@COL1",DbType.Int32,col1);
     db.AddInParameters(cmd,"@COL2",DbType.String,col2);
     db.ExecuteNoQuery(cmd);
    }

    WEBCONFIG中是以OLEDB方式连接的SQL2000数据库。执行后总是报 @COL1 未赋值的错误。

    我将连接方式改成SqlClient,就没有这个问题。请问为什么。

    2010年7月7日 10:10

答案

  • 把@...改成?即可。注意顺序。SqlClient能够识别@...写法。OLEDB识别不了。

    System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection("...");
    con.Open();
    string sql = "update test set age=? where id=1";
    System.Data.OleDb.OleDbCommand cmd = con.CreateCommand();
    cmd.CommandText = sql;
    System.Data.OleDb.OleDbParameter p1 = cmd.CreateParameter();
    p1.DbType = DbType.Int32;
    p1.Value = 25;
    cmd.Parameters.Add(p1);
    int y = cmd.ExecuteNonQuery();
    con.Close();

    • 已标记为答案 Jeuo 2010年7月8日 3:38
    2010年7月8日 3:15

全部回复

  • 对于连接SQLSERVER数据库,最好使用   System.Data.SqlClient,这样效率也高,

    你如果使用oledb的话,参数类型你用 OleDbType.Integer试试

    DbType与OleDbType 参照

                        http://www.cnblogs.com/hongyuniu/archive/2008/08/05/1260589.html


    .net/asp.net开发群118343907
    2010年7月8日 1:31
  • 对于连接SQLSERVER数据库,最好使用   System.Data.SqlClient,这样效率也高,

    你如果使用oledb的话,参数类型你用 OleDbType.Integer试试

    DbType与OleDbType 参照

                        http://www.cnblogs.com/hongyuniu/archive/2008/08/05/1260589.html


    .net/asp.net开发群118343907

    事实上我曾这么做过,但还是报同样的错误。
    2010年7月8日 2:50
  • 把@...改成?即可。注意顺序。SqlClient能够识别@...写法。OLEDB识别不了。

    System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection("...");
    con.Open();
    string sql = "update test set age=? where id=1";
    System.Data.OleDb.OleDbCommand cmd = con.CreateCommand();
    cmd.CommandText = sql;
    System.Data.OleDb.OleDbParameter p1 = cmd.CreateParameter();
    p1.DbType = DbType.Int32;
    p1.Value = 25;
    cmd.Parameters.Add(p1);
    int y = cmd.ExecuteNonQuery();
    con.Close();

    • 已标记为答案 Jeuo 2010年7月8日 3:38
    2010年7月8日 3:15