3

下面的第一个 MessageBox.Show() 只是向我显示了与 const string SQL_GET_VENDOR_ITEMS 完全相同的内容,这对我来说似乎很好,但我得到了,“解析查询时出错。[令牌行号,令牌行偏移量, , 令牌错误,,] "

添加参数后,有没有办法监视 SQL 的内容;然后它应该是这样的:“选择 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;

. . .

4

2 回答 2

4

但我几乎可以保证这在我的 VS2003/.NET 1.0 世界中不起作用

啊……版本 - 请参阅MSDN

当 CommandType 设置为Text时,SQL Server CE 的 .NET Compact Framework 数据提供程序不支持将参数传递给由 SqlCeCommand 调用的 SQL 语句的命名参数。您必须使用问号 (?) 占位符。例如:SELECT * FROM Customers WHERE CustomerID = ?

于 2013-04-03T21:25:29.313 回答
1

由于您使用的是 CE,因此您的选择有限,但是对于如何查看数据库有一些建议:Profiler for Sql CE

如果您使用的是普通 SQL Server,则可以考虑使用SQL Profiler。您将能够看到对数据库执行的操作。

于 2013-04-03T21:22:35.673 回答