我需要从数据库中的字段中检索值。我有以下代码。但值checkOrderId
(我需要)显示SQL字符串而不是数据库中的值。我不知道为什么会这样做。有人可以帮帮我吗?
string connectionString = "Data Source = xxyyzz;Initial Catalog = xyz; Integrated Security = True";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
string tableName = "[GIS].[SecondaryTraffic].[PotentialBackHauls]";
string checkOrderId = "Select TOP 1 OrderID From" + tableName + "ORDER BY InsertDate DESC";
SqlCommand cmd = new SqlCommand(checkOrderId, connection);
//cmd.ExecuteNonQuery();
OpenPop.Pop3.Pop3Client popConn = new OpenPop.Pop3.Pop3Client();
if (orderIdentity == checkOrderId)
{
popConn.DeleteMessage(messageNumber);
}
connection.Close();
我是新人,没有立即回答我的问题的声誉。在每个人的帮助下,我解决了这个问题...很棒的帮助,感谢所有人......以下是我的代码。
string connectionString =“Data Source = EAEDEV; Initial Catalog = GIS; Integrated Security = True”;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string tableName = "[GIS].[SecondaryTraffic].[PotentialBackHauls]";
string checkOrderId = "Select TOP 1 OrderID From " + tableName + " ORDER BY InsertDate DESC";
SqlCommand cmd = new SqlCommand(checkOrderId, connection);
string valueReturned = (string)cmd.ExecuteScalar();
OpenPop.Pop3.Pop3Client popConn = new OpenPop.Pop3.Pop3Client();
if (orderIdentity == valueReturned)
{
popConn.DeleteMessage(messageNumber);
}
connection.Close();
}
答案 0 :(得分:2)
您需要执行查询并检查结果,这里只是将字符串与查询SQL进行比较。
请看这里
http://www.csharp-station.com/Tutorial/AdoDotNet/lesson03
获得教程。
答案 1 :(得分:2)
您对结果设置为checkOrderId
的期望不正确。在这种情况下,checkOrderId
只是要执行的查询而不是实际结果。
您需要从执行命令后读取值:
using (var connection = new SqlConnection(connectionString))
using (var comm = new SqlCommand("Select TOP 1 OrderID From [GIS].[SecondaryTraffic].[PotentialBackHauls] ORDER BY InsertDate DESC", connection))
{
connection.Open();
object result = comm.ExecuteScalar(); // This is the key bit you were missing.
if (result != null)
{
// You can cast result to something useful
int orderId = (int)result;
}
} // Both comm and connection will have Dispose called on them here, no need to Close manually.
ExecuteScalar
返回第一个单元格(即第1列第1行)中的值,作为可以转换为更好类型的对象(取决于它在结果集架构中的类型)。 / p>
如果您需要阅读多个值,则需要查看ExecuteReader
。
使用输出参数还有其他方法可以做到这一点,但这会污染答案。
答案 2 :(得分:1)
您可以为查询添加空间
"Select TOP 1 OrderID From " + tableName + " ORDER BY InsertDate DESC";
Nota:我建议您将AddWithValue method
与参数
string checkOrderId = "Select TOP 1 OrderID From @tableName ORDER BY InsertDate DESC";
SqlCommand cmd = new SqlCommand(checkOrderId, connection);
cmd.Parameters.AddWithValue("@tableName", tableName );
答案 3 :(得分:0)
您实际上并未在任何地方运行命令。您应该查看ExecuteScalar
方法,而不是注释掉的cmd.ExecuteNonQuery
,它允许您从查询中读回单个结果值 - 这是您的查询返回的结果。
答案 4 :(得分:0)
添加
int i = (Int32) cmd.ExecuteScalar();
之后
SqlCommand cmd = new SqlCommand(checkOrderId, connection);
然后变量i
将包含订单ID
答案 5 :(得分:0)
不,这不正确。您正在将变量orderId与查询字符串进行比较。我怀疑那是你想要做的。我想你最好调用cmd.ExecuteScalar()来检索实际的OrderID值。如其他答案所述,您的查询字符串缺少空格。但最重要的是,在代码中构造SQL查询是不好的做法。虽然我看不到此代码的安全性问题,但如果继续使用此方法,您可能会编写易受SQL注入攻击的代码。我建议您学习使用参数或LINQ来构建查询。