2011-09-19 23 views
0

私は、コードを使用:私は、データベースに挿入値を使用することを意図しており、任意の二枚舌がある場合、それはerror.Theの二枚舌がproperly.But挿入を作動していることが示されます正しくない同じクリックイベントで2つのクエリを使用するにはどうすればよいですか?

protected void Button1_Click(object sender, EventArgs e) 
{ 
    DataSet ds = new DataSet(); 
    SqlConnection con = new SqlConnection("server=kiran-b946c0f6d; 
              uid=sa; 
              pwd=123; 
              database=employe"); 

    SqlCommand com=new SqlCommand("INSERT INTO Emplo VALUES('"+TextBox2.Text+"'",con); 
    com.Parameters.Add("Email_ID", SqlDbType.VarChar); 
    com.Parameters["Email_ID"].Value = TextBox2.Text; 
    con.Open(); 

    Label3.Text = "successfully added"; 
    SqlDataReader reader = null; 
    com = new SqlCommand("SELECT Email_ID FROM Emplo WHERE Email_ID='" 
         + TextBox2.Text + "'", 
         con); 

    reader = com.ExecuteReader(); 
    if (reader != null && reader.HasRows) 
    { 
     Label3.Text = "Emailid alraedy exist"; 
    } 

    reader.Dispose(); 

    SqlDataAdapter da = new SqlDataAdapter(com); 
    da.Fill(ds); 

    GridView1.DataSource = ds; 
    GridView1.DataBind(); 
    con.Close(); 
} 

をworking.It正常に挿入されたことを示します。しかし、値は挿入を行っていません。

+4

**警告:**あなたのコードはSQLインジェクション攻撃の影響を受けやすいです。 –

+3

警告2:ユーザーインターフェイス管理でデータアクセスコードを使いこなしている場合は、これらの2つの異なる懸案事項を分割し、すべてのデータアクセスロジックを分離したクラスライブラリにラップし、データの取得とデータベース接続。 –

+1

WARNING3:接続資格情報をソースコードに保存すると、資格情報を更新するたびにアプリケーションを再コンパイルし、Application ConfigurationとConnectionStringsを使用します(より効果的です)。 – sll

答えて

3

com変数を上書きする前に、実際にcom.ExecuteNonQuery()と呼んでいるわけではありません。

0

あなたはコマンドを設定してから新しいselectコマンドで上書きします。

その時点で挿入を実行していても、挿入したばかりの選択は、挿入したばかりのため常にtrueを返すと予想されます。また、データベースの構造に応じて、そのデータベースフィールドが(あなたがコードで実施しようとしているものと思われる)ユニークに設定されている場合、既に存在するものを挿入しようとするとSQL例外がスローされることが予想されます。

あなたがしたいことは、それが既に最初に存在するかどうかをチェックするために選択を実行することです。それが存在すれば、あなたはただ止めることができます。存在しない場合は、挿入を実行できます。

さらに、2つのスレッドに関連する可能性のある問題を防止するために、挿入と同時にチェックを行う単一のSQL文(より良い手順)を作成してください。挿入を行っている2つのスレッドは、そのうちの1つが最も失敗する原因となります。

関連する問題