日期:2014-05-18  浏览次数:20548 次

这段代码中的问号(?)是什么意思?
VB.NET code
 
            cmdSQL.Parameters.Clear()
            cmdSQL.Parameters.Add("@text", OleDbType.WChar).Value = txtText.Text
            cmdSQL.Parameters.Add("@user", OleDbType.WChar).Value = lbName.Text
            cmdSQL.Parameters.Add("@score", OleDbType.Integer).Value = intScore
            cmdSQL.Parameters.Add("@firsttime", OleDbType.Date).Value = nowTime
            cmdSQL.Parameters.Add("@lasttime", OleDbType.Date).Value = nowTime
            cmdSQL.Parameters.Add("@body", OleDbType.WChar).Value = txtBody.Text
            cmdSQL.Parameters.Add("@state", OleDbType.WChar).Value = strState
            cmdSQL.Parameters.Add("@type", OleDbType.WChar).Value = strTypeID

            cmdSQL.CommandText = "INSERT INTO topic([text], [user], score, rep, firsttime, lasttime, body, state, type)" & _
                                " VALUES(?,?,?,0,?,?,?,?,?)"
            cmdSQL.ExecuteNonQuery()


为什么要用问号?!马上结贴

------解决方案--------------------
1、OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持用于将参数传递到 SQL 语句或存储过程的命名参数。在此情况下,必须使用问号 (?) 占位符,如以下示例所示。SELECT * FROM Customers WHERE CustomerID = ?

2、将参数用于 OleDbCommand 或 OdbcCommand 时,向 Parameters 集合中添加参数的顺序必须与存储过程中所定义的参数顺序相匹配。OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序将存储过程中的参数视为占位符,并且将按顺序使用这些参数值。另外,返回值参数必须是添加到 Parameters 集合中的第一批参数。
因此,向 Parameters 集合添加 Parameter 对象的顺序必须直接对应于该参数的问号占位符的位置

------解决方案--------------------
占位符