2017-01-09 18 views
0

VS 2015に問題があるようです。VS 2015のコードにエラーが発生しました

これは私に同じエラーが発生し、なぜそれがわかりません。私はコードの下に挿入しました。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
     textBox2.PasswordChar = '*'; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void Exit_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    private void LogIn_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\Gigabyte\\Desktop\\apps\\WindowsFormsApplication3\\WindowsFormsApplication3\\Database1.mdf;Integrated Security=True"); 
     con.Open(); 
     SqlDataAdapter sda = new SqlDataAdapter("SELECT Status FROM Login1 WHERE Username'" + textBox1.Text + "'AND Parola='" + textBox2.Text + "' ", con); 
     con.Close(); 
     DataTable dt = new System.Data.DataTable(); 
     sda.Fill(dt); 
     if(dt.Rows.Count==1) 
     { 
      Form2 ss = new Form2(); 
      ss.Show(); 
     } 
    } 
} 
} 

アプリケーション形態は、sda.Fill(DT)と線で停止し、このエラーを表示します:

Blockquote An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll Blockquote Additional information: Incorrect syntax near 'aa'.

前もって感謝します!

編集: 問題が解決しました。

+2

を使用するときは、Open()Close()を呼び出す必要はありませんスタックオーバーフローへようこそ! [ask]をお読みください。重要なフレーズ:「検索と研究」と「あなたがそれを自分で解決することを妨げた困難を説明する」 –

+3

SQL文を確認して、SQLインジェクションを避けるためにパラメータを使用する方法を学んでください – sjramsay

答えて

0

あなたのSQLに=記号がありません。

さらに、SqlParameterを使用してデータベース入力をサニタイズする必要があります。文字列をコンカチネートしないでください。実装を続行する場合は、SQLインジェクションのために自分自身を設定しています。

もう一つの最適化がSqlDataAdapterが自動的にSqlConnectionを管理しているので、Fill()

var cmd = new SqlCommand(); 
cmd.CommandText = "SELECT Status FROM Login1 WHERE Username = @username AND Parola= @parola"; 
cmd.Parameters.AddWithValue("@username", textbox1.Text); 
cmd.Parameters.AddWithValue("@parola", textbox2.Text); 
SqlDataAdapter sda = new SqlDataAdapter(cmd); 
DataTable dt = new System.Data.DataTable(); 
sda.Fill(dt); 
+0

それは間違いです。追加のヘルプ!私はそれが必要になります! – TFAndrewPH

-1

あなたの文字列は、この私が思うようになります。

Status FROM Login1 WHERE Username ='" + textBox1.Text + "' AND Parola='" + textBox2.Text + "'

あなたは余分なスペースを見逃しているかもしれません。)

+0

通信ありがとうございますが、問題はありません。それは何も変わらない。 – TFAndrewPH

+0

文字列をチェックすると等号もあります:)申し訳ありませんが強調表示しませんでした。 – arobin

+0

@arobin:そのため、コードをコードタグ内に配置する必要があります。 – BDL

-1

SqlDataAdapterオブジェクトのSDA =新しいSqlDataAdapterオブジェクト(+ textBox1テキストボックス "Login1ユーザー名」からステータスを選択" .Text + "'AND Parola ='" + textBox2.Text + "'"、con);

変更

SqlDataAdapterオブジェクトのSDA =新しいSqlDataAdapterオブジェクト( '+ textBox1.Text + "ユーザ名= Login1からステータスを選択" " 'AND Parola ='" + textBox2.Text + "'"、詐欺にこの行);

あなたは=記号を忘れています。

+0

ありがとうございました!問題を解決しました! – TFAndrewPH

関連する問題