2013-05-27 53 views
0

我有一張包含名字,姓氏和電子郵件的表格。我想從表中檢索他們,所以我寫:以下查詢有什麼問題?

if (LoginAs.SelectedValue == "Administrator") 
{ 
    string result; 
    string query = "Select * from AdminTable where ID='"+ idBox.Text +"'"; 
    cmd1 = new SqlCommand(query, con); 
    result = Convert.ToString(cmd1.ExecuteScalar()); 

    Response.Redirect("Admin.aspx"); 
    //Admin user = new Admin(idBox.Text, "Active", mail, firstName, LastName, passwordBox.Text); 
} 

的問題是,它只返回指定行的名稱字段,即使我寫了「SELECT *」。這裏有什麼問題?

+0

的ExecuteScalar只返回第一行的第一列,而忽略休息。 –

+0

@HansKesting,我該怎麼辦? – yrazlik

回答

4

ExecuteScalar返回正好位於第一行的第一列,並忽略其餘。

所以你應該使用ExecuteReader方法。從MSDN的例子:

using (SqlConnection connection = new SqlConnection(
      connectionString)) 
{ 
    connection.Open(); 

    SqlCommand command = new SqlCommand(queryString, connection); 
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     Console.WriteLine(String.Format("{0}", reader[0])); 
    } 
} 

請注意,您的查詢while (reader.Read())檢查是否返回(更多)結果,並定位於下一個記錄光標,然後你可以閱讀。這個例子打印第一列的值。
using聲明確保連接在使用後關閉,無論發生什麼情況。另外,請勿直接使用用戶的輸入(例如TextBox的值)構建查詢,而應使用parameters來代替以防止SQL注入攻擊。

1

您可以嘗試使用cmd1.ExecuteReader()

4

你一定要嚐嚐ExecuteReader()而是採用ExecuteScalar()

ExecuteScaler的情況下使用,我們要讀一個單一的value.eg:從表名

SELECT COUNT(*)。

的ExecuteReader用於與多個行/列設置的任何結果 (例如,SELECT *從表名)

+0

我這樣做,但它返回結果?我怎樣才能得到它作爲一個字符串 – yrazlik

+0

不要執行閱讀器對字符串。 SqlDataReader dr = cmd.ExecuteReader(); –

+0

if(dr.HasRows) { string result =「」; while(dr.Read) result = Convert.ToString(dr [「FieldNameInDatabase」]); } 返回結果; –

2

示例代碼:

string myQuery="Select * from AdminTable where [email protected]"; 
SqlCommand cmd=new SqlCommand(myQuery,conn); 
cmd.Parameters.AddWithValue("@myid", value); 
conn.Open(); 
SqlDataReader dreader; 
dreader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
while (dreader.Read()) 
{ 
    string Value1= dreader["COl1"].ToString(); 
    string Value2= dreader["COl2"].ToString(); 
} 
dreader.Close(); 

始終使用參數化查詢