下面的第一个MessageBox.Show()只是向我展示了与const字符串SQL_GET_VENDOR_ITEMS完全相同的东西,这对我来说似乎很好,但我得到了,“解析查询时出错。[令牌行number,Token line offset ,,令牌错误,] “
有没有办法在添加参数后监视SQL的内容;它应该是这样的:“SELECT ItemID,PackSize FROM VendorItems WHERE VendorID ='TEST'和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;
。 。
答案 0 :(得分:4)
但我几乎可以保证在我的VS2003 / .NET 1.0世界中不起作用
啊......版本 - 见MSDN:
当CommandType设置为文本时,SQL Server CE的.NET Compact Framework数据提供程序不支持将参数传递给SqlCeCommand调用的SQL语句的命名参数。您必须使用问号(?)占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
答案 1 :(得分:1)
由于您使用CE,您的选择有限,但有一些关于如何查看数据库的建议:Profiler for Sql CE
如果您使用普通SQL Server,则可以考虑使用SQL Profiler。您将能够看到对数据库执行的操作。