我在这里有公共DataTable并且代码看起来正确,但它没有返回任何内容,OrderID是正确的,查询本身是正确的,它没有返回任何东西......任何人都可以告诉我为什么?
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 :(得分: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。
您没有为数据库中的OrderId指定数据类型。我猜它可能是非数字的。 (guid或varchar - 我见过使用nun-numeric ID的数据库,所以它不是不可接受的。)如果它是非数字的,你可能会错过引号值。
示例:
Where Id = 1
与
不同Where Id= '1'
使用参数化查询会自动为您解决此问题。