2014-01-23 56 views
5

我正在使用這些代碼行來檢查記錄是否存在。檢查數據庫中是否存在記錄

SqlCommand check_User_Name = new SqlCommand("SELECT * FROM Table WHERE ([user] = '" + txtBox_UserName.Text + "') ", conn); 

int UserExist = (int)check_User_Name.ExecuteScalar(); 

但我得到一個錯誤:

Object reference not set to an instance of an object. 

我想做的事:

if (UserExist > 0) 
    // Update record 

else 

    // Insert record 
+0

什t究竟是不是一個對象? –

+0

當這個錯誤顯示如果表中的用戶名或不是? –

+0

您的查詢應該是: 從表where where ... – Dannydust

回答

12

ExecuteScalar返回第一行的第一列。其他列或行將被忽略。它看起來像第一行的第一列是null,這就是爲什麼當您嘗試使用ExecuteScalar方法時得到NullReferenceException

MSDN;

Return Value

The first column of the first row in the result set, or a null reference if the result set is empty.

您可能需要在你的語句中使用COUNT而不是返回受影響的行數...

使用parameterized queries始終是一個很好的做法。它可以防止攻擊。

Table是T-SQL中的reserved keyword。您應該將它與方括號一起使用,例如[Table]

作爲最後一個建議,使用using statement用於處置您的SqlConnectionSqlCommand

SqlCommand check_User_Name = new SqlCommand("SELECT COUNT(*) FROM [Table] WHERE ([user] = @user)" , conn); 
check_User_Name.Parameters.AddWithValue("@user", txtBox_UserName.Text); 
int UserExist = (int)check_User_Name.ExecuteScalar(); 

if(UserExist > 0) 
{ 
    //Username exist 
} 
else 
{ 
    //Username doesn't exist. 
} 
+2

我檢查了值在文本框中輸入「UserExist」並給出-1即使記錄存在。我不知道這是什麼問題。 – Kamran

+0

@Downvoter是的,14個月後,你是第一個意識到我的答案根本不起作用的人。謝謝。我修好了它。 –

+1

從數據庫的角度來看,您應該使用:SELECT top 1 1 FROM [Table] WHERE([user] = @user)並檢查ExecuteScalar是否爲null。它比count更好(*) –

0

使用方法Int.Parse()代替。它會工作。

+0

這對OP有什麼用? –

+0

我試過了,看起來這個對象不是真的是空的,而是有一些尷尬的鑄造問題。解析工作 – shirbr510

0

使用嘗試捕捉:

try 
{ 
    SqlCommand check_User_Name = new SqlCommand("SELECT * FROM Table WHERE ([user] = '" + txtBox_UserName.Text + "') ", conn); 

    int UserExist = (int)check_User_Name.ExecuteScalar(); 
    // Update query 
} 
catch 
{ 
    // Insert query 
} 
0

我會用「數」具有總是整數爲

SqlCommand check_User_Name = new SqlCommand("SELECT count([user]) FROM Table WHERE ([user] = '" + txtBox_UserName.Text + "') " , conn); 

int UserExist = (int)check_User_Name.ExecuteScalar(); 

if (UserExist == 1) //anything different from 1 should be wrong 
{ 
    //Username Exist 
} 
3

當你真的確定你的查詢ExecuteScalar方法應使用結果只返回一個值,如下所示:

SELECT ID FROM USERS WHERE USERNAME = 'SOMENAME' 

如果要整行,那麼下面的代碼應該更多ap propriate。

SqlCommand check_User_Name = new SqlCommand("SELECT * FROM Table WHERE ([user] = @user)" , conn); 
check_User_Name.Parameters.AddWithValue("@user", txtBox_UserName.Text); 
SqlDataReader reader = check_User_Name.ExecuteReader(); 
if(reader.HasRows) 
{ 
    //User Exists 
} 
else 
{ 
    //User NOT Exists 
} 
+0

這是行不通的,因爲你甚至沒有在'SqlCommand'中添加參數。 –

+0

噢,對不起,我忘記了,我現在正在編輯:) –

+0

使用ExecuteScalar()是最短的方式。 –

0

你可以寫如下:

SqlCommand check_User_Name = new SqlCommand("SELECT * FROM Table WHERE ([user] = '" + txtBox_UserName.Text + "') ", conn); 
if (check_User_Name.ExecuteScalar()!=null) 
{ 
    int UserExist = (int)check_User_Name.ExecuteScalar(); 
    if (UserExist > 0) 
    { 
     //Username Exist 
    } 
} 
+2

如果第一行的第一列不是用戶名?你只是猜測它是。在這種情況下,ExecuteNonQuery是更好的方法.. –

+0

是的。你是絕對正確@SonerGönül但他的實施代碼,我已經給出了這個解決方案。 – Chirag

0

我問自己同樣的問題,我發現沒有明確的答案,所以我創建了一個簡單的測試。

我試着用重複的主鍵添加100行並測量處理它所需的時間。我正在將SQL Server 2014開發人員和實體框架6.1.3與自定義存儲庫一起使用。

Dim newE As New Employee With {.Name = "e"} 
For index = 1 To 100 
    Dim e = employees.Select(Function(item) item.Name = "e").FirstOrDefault() 
    If e Is Nothing Then 
    employees.Insert(newE) 
    End If 
Next 

2。1秒

Dim newE As New Employee With {.Name = "e"} 
For index = 1 To 100 
    Try 
    employees.Insert(newE) 
    Catch ex As Exception 
    End Try 
Next 

3.1秒

0
sda = new SqlCeDataAdapter("SELECT COUNT(regNumber) AS i FROM tblAttendance",con); 
sda.Fill(dt); 

string i = dt.Rows[0]["i"].ToString(); 
int bar = Convert.ToInt32(i); 

if (bar >= 1){ 

    dt.Clear(); 
    MetroFramework.MetroMessageBox.Show(this, "something"); 
} 
else if(bar <= 0) { 

    dt.Clear(); 
    MetroFramework.MetroMessageBox.Show(this, "empty"); 
} 
1
sqlConnection.Open(); 
using (var sqlCommand = new SqlCommand("SELECT COUNT(*) FROM Table WHERE ([user] = '" + txtBox_UserName.Text + "'", sqlConnection)) 
{ 

    SqlDataReader reader = sqlCommand.ExecuteReader(); 
    if (reader.HasRows) 
    { 
     lblMessage.Text ="Record Already Exists."; 

    } 
    else 
    { 
     lblMessage.Text ="Record Not Exists."; 
    } 

    reader.Close(); 
    reader.Dispose(); 
} 

sqlConnection.Close(); 
0

嘗試這種

public static bool CheckUserData(string phone, string config) 
    { 
     string sql = @"SELECT * FROM AspNetUsers WHERE PhoneNumber = @PhoneNumber"; 
     using (SqlConnection conn = new SqlConnection(config) 
      ) 
     { 
      conn.Open(); 
      using (SqlCommand cmd = new SqlCommand(sql, conn)) 
      { 
       cmd.Parameters.AddWithValue("@PhoneNumber", phone); 
       SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
       if (reader.HasRows) 
       { 
        return true; // data exist 
       } 
       else 
       { 
        return false; //data not exist 
       } 
      } 
     } 
    } 
-1
protected void btnsubmit_Click(object sender, EventArgs e) 
{ 

     string s = @"SELECT * FROM tbl1 WHERE CodNo = @CodNo"; 
    SqlCommand cmd1 = new SqlCommand(s, con); 
    cmd1.Parameters.AddWithValue("@CodNo", txtid.Text); 
    con.Open(); 
    int records = (int)cmd1.ExecuteScalar(); 

    if (records > 0) 
    { 

     Response.Write("<script>alert('Record not Exist')</script>"); 

    } 
    else 
    { 
     Response.Write("<script>alert('Record Exist')</script>"); 
    } 
    } 
     private void insert_data() 
{ 

     SqlCommand comm = new SqlCommand("Insert into tbl1(CodNo,name,lname,fname,gname,EmailID,PhonNo,gender,image,province,district,village,address,phonNo2,DateOfBirth,school,YearOfGraduation,exlanguage,province2,district2,village2,PlaceOfBirth,NIDnumber,IDchapter,IDpage,IDRecordNumber,NIDCard,Kankur1Year,Kankur1ID,Kankur1Mark,Kankur2Year,Kankur2ID,Kankur2Mark,Kankur3Year,Kankur3ID,Kankur3Mark) values(@CodNo,N'" + txtname.Text.ToString() + "',N'" + txtlname.Text.ToString() + "',N'" + txtfname.Text.ToString() + "',N'" + txtgname.Text.ToString() + "',N'" + txtemail.Text.ToString() + "','" + txtphonnumber.Text.ToString() + "',N'" + ddlgender.Text.ToString() + "',@image,N'" + txtprovince.Text.ToString() + "',N'" + txtdistrict.Text.ToString() + "',N'" + txtvillage.Text.ToString() + "',N'" + txtaddress.Value.ToString() + "','" + txtphonNo2.Text.ToString() + "',N'" + txtdbo.Text.ToString() + "',N'" + txtschool.Text.ToString() + "','" + txtgraduate.Text.ToString() + "',N'" + txtexlanguage.Text.ToString() + "',N'" + txtprovince1.Text.ToString() + "',N'" + txtdistrict1.Text.ToString() + "',N'" + txtvillage1.Text.ToString() + "',N'" + txtpbirth.Text.ToString() + "','" + txtNIDnumber.Text.ToString() + "','" + txtidchapter.Text.ToString() + "', '" + txtidpage.Text.ToString() + "','" + txtrecordNo.Text.ToString() + "',@NIDCard,'" + txtkankuryear1.Text.ToString() + "','" + txtkankurid1.Text.ToString() + "','" + txtkankurscore1.Text.ToString() + "','" + txtkankuryear2.Text.ToString() + "','" + txtkankurid2.Text.ToString() + "','" + txtkankurscore2.Text.ToString() + "','" + txtkankuryear3.Text.ToString() + "','" + txtkankurid3.Text.ToString() + "','" + txtkankurscore3.Text.ToString() + "')", con); 

     flpimage.SaveAs(Server.MapPath("~/File/") + flpimage.FileName); 
     string img = @"~/File/" + flpimage.FileName; 
     flpnidcard.SaveAs(Server.MapPath("~/Tazkiera/") + flpnidcard.FileName); 
     string img1 = @"~/Tazkiera/" + flpnidcard.FileName; 

     comm.Parameters.AddWithValue("CodNo", Convert.ToInt32(txtid.Text)); 
     comm.Parameters.AddWithValue("image", flpimage.FileName); 
     comm.Parameters.AddWithValue("NIDCard", flpnidcard.FileName); 

     comm.ExecuteNonQuery(); 
     con.Close(); 

     Response.Redirect("~/SecondPage.aspx"); 
     //Response.Write("<script>alert('Record Inserted')</script>"); 

     } 
    } 
0
private void GvOpStock_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     try 
     { 
      if (e.ColumnIndex != 0) 

       for (int row = 0; row < GvOpStock.Rows.Count - 1; row++) 
       { 

        if (GvOpStock.Rows[row].Cells[1].Value != null && 
         row != e.RowIndex && 
         GvOpStock.Rows[row].Cells[1].Value.Equals(GvOpStock.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)) 
        { 

         MessageBox.Show("Duplicate"); 
         return; 

        } 
        else 
        { 

         //Add To datagridview 

        } 

       } 
     } 
     catch (Exception ex) 
     { 

     } 
    } 
0
MySqlCommand cmd = new MySqlCommand("select * from table where user = '" + user.Text + "'", con); 
MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
DataSet ds1 = new DataSet(); 
da.Fill(ds1); 
int i = ds1.Tables[0].Rows.Count; 
if (i > 0) { 
    // Exist 
} 
else { 
    // Add 
} 
相關問題