Saya seorang pemula dengan c#, ketika saya mengeksekusi kode, pesan kesalahan ini muncul>>
"Pengecualian tipe 'System.Data.SqlClient.SqlException' terjadi di dalam System.Data.dll tetapi tidak ditangani dalam kode pengguna
Informasi tambahan: Sintaks yang salah di dekat '='. "
Dan ini adalah kodenya!!!
string position;
SqlConnection con = new SqlConnection("server=free-pc\\FATMAH; Integrated Security=True; database=Workflow; ");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=" + id.Text, con);
SqlDataReader Read = cmd.ExecuteReader();
if (Read.Read()==true)
{
position = Read[0].ToString();
Response.Write("User Registration successful");
}
else
{
Console.WriteLine("No Employee found.");
}
Read.Close();
Ada beberapa masalah dengan kode Anda. Pertama saya menyarankan untuk menggunakan query parametrized sehingga Anda terhindar dari serangan SQL Injection dan juga tipe parameter ditemukan oleh framework:
var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
Kedua, karena Anda hanya tertarik pada satu nilai yang dikembalikan dari query, lebih baik menggunakan ExecuteScalar
MSDN:
var name = cmd.ExecuteScalar();
if (name != null)
{
position = name.ToString();
Response.Write("User Registration successful");
}
else
{
Console.WriteLine("No Employee found.");
}
Hal terakhir adalah membungkus SqlConnection
dan SqlCommand
ke dalam using
sehingga sumber daya yang digunakan oleh mereka akan dibuang:
string position;
using (SqlConnection con = new SqlConnection("server=free-pc\\FATMAH; Integrated Security=True; database=Workflow; "))
{
con.Open();
using (var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con))
{
cmd.Parameters.AddWithValue("@id", id.Text);
var name = cmd.ExecuteScalar();
if (name != null)
{
position = name.ToString();
Response.Write("User Registration successful");
}
else
{
Console.WriteLine("No Employee found.");
}
}
}
Saya pikir kolom EmpID
Anda adalah string dan Anda lupa menggunakan ' '
dalam nilai Anda.
Karena ketika anda menulis EmpID=" + id.Text
, perintah anda akan terlihat seperti EmpID = 12345
bukan EmpID = '12345'
Ubah SqlCommand
Anda menjadi
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID='" + id.Text +"'", con);
Atau sebagai cara yang lebih baik Anda dapat (dan harus) selalu menggunakan parameterized queries
. Penggabungan string semacam ini terbuka untuk serangan SQL Injection
.
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
Saya pikir kolom EmpID
Anda menyimpan id karyawan Anda, jadi tipe kolom tersebut haruslah tipe numerik, bukan karakter.