una soporta segundo rapida por para optimizar optimizacion mas lentas hacer grandes datos cuantas consultas consulta con como cantidades c# winforms sqlcommand

c# - soporta - optimizar consultas lentas mysql



Verifique si existe un registro en la base de datos (11)

El método ExecuteScalar se debe usar cuando esté realmente seguro de que su consulta solo arroja un valor como el siguiente:

SELECT ID FROM USERS WHERE USERNAME = ''SOMENAME''

Si desea toda la fila, entonces el siguiente código debería ser más apropiado.

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 }

Estoy usando estas líneas de código para verificar si el registro existe o no.

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

Pero estoy recibiendo un error:

Object reference not set to an instance of an object.

Quiero hacer:

if (UserExist > 0) // Update record else // Insert record


Me estaba haciendo la misma pregunta y no encontré respuestas claras, así que creé una prueba simple.

Traté de agregar 100 filas con claves primarias duplicadas y medí el tiempo necesario para procesarlo. Estoy usando SQL Server 2014 Developer y Entity Framework 6.1.3 con un repositorio personalizado.

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 segundos

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 segundos


Puedes escribir de la siguiente manera:

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 } }


Usaría el "recuento" para tener siempre un número entero como resultado

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 }


Use ''Int.Parse ()'' en su lugar. Funciona.


Utilice 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 }


prueba esto

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 } } } }


ExecuteScalar devuelve la primera columna de la primera fila. Otras columnas o filas son ignoradas. Parece que su primera columna de la primera fila es null , y es por eso que obtiene NullReferenceException cuando intenta utilizar el método ExecuteScalar .

De MSDN ;

Valor de retorno

La primera columna de la primera fila en el conjunto de resultados, o una referencia nula si el conjunto de resultados está vacío .

Es posible que deba usar COUNT en su extracto en su lugar, que devuelve el número de filas afectadas ...

El uso de consultas parametrizadas siempre es una buena práctica. Evita los ataques de inyección SQL .

Y Table es una palabra clave reservada en T-SQL. Debe usarlo entre corchetes, como [Table] también.

Como sugerencia final, use la instrucción using para desechar su SqlConnection y 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. }


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>"); } }


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"); }


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();