在参数替换了占位符后,如何查看发送到数据库的SQL?

时间:2013-04-03 21:10:52

标签: c# sql sql-server-ce windows-ce .net-1.0

下面的第一个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;

。 。

2 个答案:

答案 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。您将能够看到对数据库执行的操作。