2012-12-06 49 views
0

這是比較參照我剛纔的問題:儲值,並將其與價值

Search data in database

我用下面的代碼來執行我的查詢。但是我有問題來存儲命令的值,然後使用該結果來比較值。

這是我的代碼:

SqlDataReader sdrDatanew = null; 
string strnew; 
string connectionString = WebConfigurationManager.ConnectionStrings["Gen_LicConnectionString"].ConnectionString; 
SqlConnection connew = new SqlConnection(connectionString); 
connew.Open(); 
strnew = "select User_Type from User_Details where User_Type='" + ddlUserSel.SelectedItem.Value + "' AND LoginID = '" + txtUserName.Text + "' AND Password = '" + txtPassword.Text + "'"; 
SqlCommand sqlCommnew = new SqlCommand(strnew, connew); 
sdrDatanew = sqlCommnew.ExecuteReader(); 
if (sdrDatanew.HasRows) 
    { 
    if (sdrDatanew.Read()) 
     { 
      //Here I want to store the result from the sqlcommand in a variable 
     } 
    } 

    switch (//Here I want to use the variable in a switch case) //<--- 
    { 
     case 0: 
      Response.Redirect("Lic_Gen.aspx"); 
      break; 
     case 1: 
      Response.Redirect("Cust_Page.aspx"); 
      break; 
    } 

    connew.Close(); 
+0

什麼問題到底是什麼? – rikitikitik

+0

問題是什麼? – Androyds

+0

我沒有得到如何將sqlcommand的結果存儲到變量。就像我從sql查詢中得到的結果一樣,我希望將值存儲起來,然後我可以在switch case中使用該變量。 – Esha

回答

1

在任何的GET功能看一看Retrieving Data Using a DataReader (ADO.NET)

,更具體的行

Console.WriteLine("{0}\t{1}", reader.GetInt32(0),reader.GetString(1)); 

爲如

SqlDataReader.GetString MethodSqlDataReader.GetInt32 Method

,所以你可以嘗試像

int userType = 0; 
if (sdrDatanew.HasRows) 
{ 
    if (sdrDatanew.Read()) 
    { 
     userType = sdrDatanew.GetInt32(0); //something like this 
    } 
} 

switch (userType) //something like this 
{ 
    case 0: 
     Response.Redirect("Lic_Gen.aspx"); 
     break; 
    case 1: 
     Response.Redirect("Cust_Page.aspx"); 
     break; 
} 
+0

如果我在int userType = 0處應用斷點,則if語句現在變成false。 – Esha

+0

現在它給了我一個錯誤:在userType = sdrDatanew.GetInt32(0)'語句中指定的轉換無效'語句 – Esha

+0

數據庫中User_Type的類型是什麼?和什麼是類型假設在C#中? –

0

您的代碼看起來是正確的。在行之前聲明變量

if (sdrDatanew.HasRows) 

並將值存儲在您想要的位置。你將能夠使用你寫過switch case的變量。

//這將存儲行中第一列的值。

var row=((IDataRecord) (sdrDatanew))[0]; 
+0

這就是我沒有得到的。我如何存儲結果?從查詢? – Esha

+0

添加了一行以顯示如何從閱讀器讀取列值。 – techfun

1

你需要調用sdrDatanew.GetInt32(0)方法和使用parameterized SQL語句。

using(SqlConnection connew = new SqlConnection(connectionString)) 
{ 
    strnew = @"select User_Type from User_Details where [email protected] 
      AND [email protected] AND Password = @password"; 
    using(SqlCommand sqlCommnew = new SqlCommand(strnew, connew)) 
    { 
    sqlCommnew.Parameters.AddWithValue("@usertype",ddlUserSel.SelectedItem.Value); 
    sqlCommnew.Parameters.AddWithValue("@loginid",txtUserName.Text); 
    sqlCommnew.Parameters.AddWithValue("@password",txtPassword.Text); 

    connew.Open(); 
    sdrDatanew = sqlCommnew.ExecuteReader(); 

    int userType=-1; 
    if(sdrDatanew.Read()) 
     userType=sdrDatanew.GetInt32(0); 

    switch (userType) 
     { 
     case 0: 
      Response.Redirect("Lic_Gen.aspx"); 
      break; 
     case 1: 
      Response.Redirect("Cust_Page.aspx"); 
      break; 
     } 
    } 
} 
0

如果你想要得到的結果試試這個代碼

while (sdrDatanew.Read()) { 
String userDetails = sdrDatanew("User_Details").ToString; 

} 

我無法理解你在做什麼。你想得到結果嗎?結果是它只是一個字符串還是一串字符串?

0

嘗試以下方法來代替:

string value = string.Empty 
if (sdrDatanew.HasRows) 
{ 
    while (sdrDatanew.Read()) 
    { 
      value= results[0].ToString(); 
    } 
} 

或因爲它僅僅是一列在選擇以下內容:

using (SqlCommand cmd = conn.CreateCommand()) 
       { 
        cmd.CommandText = "SELECT 'column' from 'table' WHERE 'column' ='criteria' "; 

        string value = cmd.ExecuteScalar().ToString(); 
       }