回 帖 发 新 帖 刷新版面

主题:关于数据库操作中的几个参数问题

//执行SQL语句无回返值
        public override void exeSql(string strSql, string[] strParams, object                [] strValues)
        {
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = this.conn;
            if (inTransaction)
                cmd.Transaction = trans;
            if ((strParams != null) && (strParams.Length !=strValues.Length))
                throw new ParamValueNotMatchException("查询参数和值不对应!");
            
            cmd.CommandText = this.ChangeQueryString(strSql);
            if (strParams != null)
            {
                for (int i = 0; i < strParams.Length; i++)
                    cmd.Parameters.Add(strParams[i], strValues[i]);
            }
            cmd.ExecuteNonQuery();
        }


//请问参数:string[] strParams, object [] strValues的涵义

//ParamValueNotMatchException是系统类里的吗?

//运行时提示:cmd.Parameters.Add(strParams[i], strValues[i]);已过时

回复列表 (共1个回复)

沙发

string[] strParams代表Sql语句中需要赋值的参数名称,object[] strValues代表其对应的值。
ParamValueNotMatchException不是系统定义中的异常。
在.NET FrameWork2.0中,该方法已经过时,虽然可以继续使用,但是最好使用其他方法替换。IDE通过设置,可以将这一类问题在编译时作为error抛出来,也可以作为warn,看你的设置了。
如果 CommandType 设置为 Text,OLE DB .NET 提供程序不支持将参数传递给 OleDbCommand 调用的 SQL 语句或存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如: 
SELECT * FROM Customers WHERE CustomerID = ? 
然后使用Add(object[] para)方法,其中para的顺序和Sql语句中参数的顺序一致。
不知道对你有没有帮助。

我来回复

您尚未登录,请登录后再回复。点此登录或注册