检查数据库中是否存在记录
我正在使用这些代码行来检查记录是否存在。
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
ExecuteScalar
返回第一行的第一列。 其他列或行将被忽略。 看起来你的第一行的第一列是null
,这就是你尝试使用ExecuteScalar
方法时得到NullReferenceException
的原因。
来自MSDN ;
回报价值
结果集中第一行的第一列, 如果结果集为空,则为空引用 。
您可能需要在语句中使用COUNT
而不是返回受影响的行数…
使用参数化查询始终是一种很好的做法。 它可以防止SQL注入攻击。
Table
是T-SQL中的保留关键字 。 您应该使用方括号,如[Table]
。
作为最后的建议,使用using
语句来处置你的SqlConnection
和SqlCommand
:
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. }
当您确定查询只返回如下所示的值时,应使用ExecuteScalar方法:
SELECT ID FROM USERS WHERE USERNAME = 'SOMENAME'
如果你想要整行,那么下面的代码应该更合适。
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 }
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();
我会使用“count”来得到一个整数作为结果
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 }
使用try catch:
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 }
您可以写如下:
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 } }
我问自己同样的问题,我没有找到明确的答案,所以我创建了一个简单的测试。
我尝试使用重复的主键添加100行,并测量处理它所需的时间。 我正在使用SQL Server 2014 Developer和Entity Framework 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秒
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"); }
试试这个
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 } } } }
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 }
请改用Int.Parse()
方法。 它会工作。
上述就是C#学习教程:检查数据库中是否存在记录分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
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(""); } else { Response.Write(""); } } 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(""); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/985052.html