2012-10-12 79 views
1

我在这里有公共DataTable和代码看起来不错,但它没有返回任何东西,OrderID是正确的,查询本身是正确的,它没有返回任何东西......任何人都可以告诉我为什么?C#SQL查询不返回任何东西

public DataTable get_OrderTransaction_Master_ByOrderID(Int64 orderID) 
    { 

     cn = new SqlConnection(objCommon.IpcConnectionString); 
     cn.Open(); 

     string query = "select transactionID from dbo.OrderTransaction_Master where orderID = " + orderID; 
     SqlCommand queryCommand = new SqlCommand(query, cn); 
     SqlDataReader queryCommandReader = queryCommand.ExecuteReader(); 
     DataTable dataTable = new DataTable(); 
     dataTable.Load(queryCommandReader); 
     cn.Close(); 
     return dataTable; 

    } 
+0

因此直接提交与数据库完全相同的查询(例如,在SQL mgmt studio中),得出结果? – kaveman

+0

您是否使用Sql Management Studio试过了您的查询?有时候,错误在该工具中变得明显。 – Steve

回答

2

警告:这是基于不完整信息的猜测:

试试这个:更改查询字符串,并添加行添加参数。

string query = "select transactionID from dbo.OrderTransaction_Master where orderID = @OrderId"; 
    SqlCommand queryCommand = new SqlCommand(query, cn); 
    queryCommand.Parameters.AddWithValue("@OrderId", orderID); 
    SqlDataReader queryCommandReader = queryCommand.ExecuteReader(); 

说明:这不仅会阻止SQL Injection,它会自动保证将订单的正确处理。

您没有指定数据库中OrderId的数据类型。我猜它可能是非数字的。 (guid或varchar - 我见过使用nun-numeric ID的数据库,所以不会令人难以接受。)如果它是非数字的,你可能会错过引用的值。

例子:

Where Id = 1 

并不像

Where Id= '1' 

同样使用参数化查询将自动地解决这个问题你。