我怎么能看到发送到数据库的SQL参数已经取代了他们的占位符后
本文关键字:取代 他们的 占位符 参数 SQL 怎么能 数据库 | 更新日期: 2023-09-27 18:07:22
下面的第一个MessageBox.Show()简单地向我显示了与const字符串SQL_GET_VENDOR_ITEMS完全相同的东西,这对我来说似乎很好,但我得到,"解析查询出错。[令牌行号,令牌行偏移量,,令牌错误,,]"
是否有一种方法可以在添加参数后监视SQL的内容;然后应该是这样的:"SELECT ItemID, PackSize FROM VendorItems WHERE VendorID = 'TEST' AND VendorItemID = '852963'
相关代码如下:
const string SQL_GET_VENDOR_ITEMS = "SELECT ItemID, PackSize " +
"FROM VendorItems " +
"WHERE VendorID = @VendorID AND VendorItemID = @VendorItemID";
string retVal = string.Empty;
checkConnection();
SqlCeCommand vendorCMD = objCon.CreateCommand();
try
{
vendorCMD.CommandText = SQL_GET_VENDOR_ITEMS;
vendorCMD.Parameters.Add("@VendorID", SqlDbType.NVarChar, 10).Value = VendorID;
vendorCMD.Parameters.Add("@VendorItemID", SqlDbType.NVarChar, 19).Value = VendorItemID;
MessageBox.Show(string.Format("Made it up to vendorCMD.ExecuteReader() with sql {0}", vendorCMD.CommandText));
. . .
vendorReader.Close();
}
catch (SqlCeException sqlceex)
{
MessageBox.Show(string.Format("SqlCeException in GetValsForVendorAndItem == {0}", sqlceex.Message));//TODO: Remove
}
finally
{
vendorCMD.Dispose();
}
return retVal;
…
但是我几乎可以保证这在我的VS2003/中不起作用。. NET 1.0 world
啊……版本-见MSDN:
当CommandType被设置为Text时,SQL Server CE的. net Compact Framework数据提供程序不支持将参数传递给由SqlCeCommand调用的SQL语句的命名参数。必须使用问号占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
既然你是在CE上,你的选择是有限的,但是有一些关于如何窥视数据库的建议:
如果你使用的是普通的SQL Server,你可以考虑使用SQL Profiler。您将能够看到对数据库执行了什么。