[英]Executing a data command query through ASP.NET
我正在嘗試對本地數據庫執行數據命令查詢,但我想我可能已經混淆或遺漏了一些語法...我一直在嘗試跟隨MSDN的教程,但他們展示的代碼部分不是'對我來說太有意義了。 我已經打開了與DB的連接,但我無法弄清楚如何從用戶輸入文本框傳遞參數並使用帶有該參數的select語句,該語句也使用LIKE語句返回結果集,然后我可以循環匹配的記錄。 1)點擊我的搜索按鈕后,它說我有一個無效的對象名稱'name'這是一個問題。 2)您是否也可以查看我的代碼並讓我知道我是否要嘗試使用參數執行此select語句並返回錯誤的結果集?
這是我到目前為止所擁有的
System.Data.SqlClient.SqlDataReader dReader;
protected void btnFirst_Click(object sender, EventArgs e)
{
using (var conn = new System.Data.SqlClient.SqlConnection(@"Server=LOCALHOST; Database=Student;Trusted_Connection=True;"))
{
try
{
conn.Open();
}
catch (Exception ex)
{
lblSearch.Text = "connection problem!";
}
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("Delete From Name", conn))
{
cmd.ExecuteNonQuery();
}
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("SELECT Name, Address from Student where Name LIKE '%@Name%'", conn))
{
cmd.Parameters["@Name"].Value = txtSearch.Text;
}
lblFirst.Text = "@Name";
String s = "";
while (dReader.Read())
{
s+= dReader["@Name"].ToString();
}
txtSearch.Text = s;
dReader.Close();
}
}
沒有執行該命令,您在哪里初始化該讀取器? 圍繞SqlCommand的使用過早關閉。 你錯過了一些代碼嗎?
然后我會在LIKE子句后刪除通配符並將它們添加到參數值。
最后,SqlDataReader處理列名而不是參數。
因此,您需要使用其真實名稱來處理所需的列
using (var Sqlcmd = new SqlCommand("SELECT Name, Address from Student " +
"where Name LIKE @Name", conn))
{
cmd.Parameters.AddWithValue("@Name", "%" + txtSearch.Text "%");
using(SqlDataReader dReader = cmd.ExecuteReader())
{
StringBuilder s = new StringBuilder(1024);
while (dReader.Read())
{
s.Append(dReader["Name"].ToString());
}
txtSearch.Text = s.ToString();
}
}
如果你有大量的記錄返回我建議使用StringBuilder而不是字符串,以避免在每個循環中創建字符串s
的新副本
我建議改變的另一點是連接開放時的try / catch。 如果你沒有發出什么問題的信號,你就很難解決問題。 如果您不想,此時構建一個日志基礎結構,至少在標簽中報告異常消息
好的,對不起,如果我很無聊,但還有另一段代碼不清楚:
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("Delete From Name", conn))
{
cmd.ExecuteNonQuery();
}
此代碼刪除一切從一個指定的表Name
,它似乎是錯誤給出的上下文。
編輯在下面發表評論
using(SqlDataReader dReader = cmd.ExecuteReader())
{
// First item displayed on the textbox
if(dReader.HasRows)
txtSearch.Text = dReader["Name"].ToString();
// Continue looping on every record and copy the name field in a list
List<string> names = new List<string>()
while (dReader.Read())
{
names.Add(dReader["Name"].ToString());
}
// Here you have you list of names in memory to be used where you need it
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.