私はc#の初心者です。コードを実行すると、このエラーメッセージが表示されます>>
「タイプ 'System.Data.SqlClient.SqlException'の例外がSystem.Data.dllで発生しましたが、ユーザーコードでは処理されませんでした
追加情報:「=」付近の構文が正しくありません。 」
そして、これがコードです!!
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();
コードにいくつかの問題があります。最初に、パラメーター化されたクエリを使用して、SQLインジェクション攻撃を回避し、パラメータータイプがフレームワークによって検出されるようにすることをお勧めします。
var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
次に、クエリから返される1つの値のみに関心があるため、ExecuteScalar
[〜#〜] msdn [〜#〜] を使用することをお勧めします。
var name = cmd.ExecuteScalar();
if (name != null)
{
position = name.ToString();
Response.Write("User Registration successful");
}
else
{
Console.WriteLine("No Employee found.");
}
最後に、SqlConnection
とSqlCommand
をusing
にラップして、それらが使用するリソースが破棄されるようにします。
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.");
}
}
}
EmpID
列はstringであり、' '
あなたの値。
なぜならEmpID=" + id.Text
、コマンドはEmpID = 12345
の代わりに EmpID = '12345'
SqlCommand
を変更します
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID='" + id.Text +"'", con);
または、より良い方法として、常に parameterized queries
。この種類の文字列連結は、 SQL Injection
攻撃。
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
EmpID
列は従業員IDを保持しているため、文字ではなく数値型である必要があります。
これを試して
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=@id", con);
cmd.Parameters.AddWithValue("id", id.Text);
try-catchを使用して、実際に発生したエラーを確認します
try
{
//Your insert code here
}
catch (System.Data.SqlClient.SqlException sqlException)
{
System.Windows.Forms.MessageBox.Show(sqlException.Message);
}
System.Data.dllで「System.Data.SqlClient.SqlException」タイプの未処理の例外が発生しました
private const string strconneciton = "Data Source=.;Initial Catalog=Employees;Integrated Security=True";
SqlConnection con = new SqlConnection(strconneciton);
private void button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = new SqlCommand("insert into EmployeeData (Name,S/O,Address,Phone,CellNo,CNICNO,LicenseNo,LicenseDistrict,LicenseValidPhoto,ReferenceName,ReferenceContactNo) values ( '" + textName.Text + "','" + textSO.Text + "','" + textAddress.Text + "','" + textPhone.Text + "','" + textCell.Text + "','" + textCNIC.Text + "','" + textLicenseNo.Text + "','" + textLicenseDistrict.Text + "','" + textLicensePhoto.Text + "','" + textReferenceName.Text + "','" + textContact.Text + "' )", con);
cmd.ExecuteNonQuery();
con.Close();
}