2016-10-07 9 views
0

をクリックしながら、型「System.Data.SqlClient.SqlException」が最初のチャンス例外が追加情報のSystem.Data.dllSystem.Data.SqlClient.SqlExceptionエラーボタン1

に発生しました:無効なオブジェクト名「ログイン」。

public partial class Form1 : MetroFramework.Forms.MetroForm 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Igurek\Documents\Database.mdf;Integrated Security=True;Connect Timeout=30"); 
    private void metroButton1_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    private void metroButton2_Click(object sender, EventArgs e) 
    { 
     SqlDataAdapter sdf = new SqlDataAdapter("Select Count(*) From Login where Username='" + metroTextBox1.Text + "' and Password='" + metroTextBox2.Text + "'", con); 
     DataTable dt = new DataTable(); 


     sdf.Fill(dt); // <--------- Here's the exception 
     if (dt.Rows.Count == 1) 
     { 
      Form1 f1 = new Form1(); 
      f1.Show(); 

     } 
     else 
     { 
      MessageBox.Show("Sprawdz Nazwe i Haslo"); 
     } 
    } 
} 

スクリーンショット:

はここにコードだ

image description

答えて

0

メッセージは非常に明確である:あなたがLoginという名前のデータベース内のオブジェクト(表、ビュー)を持っていません。クエリがそのオブジェクトから選択しようとしています。

Select Count(*) From Login where... 

こちらより大きく、より重要な問題は、クエリを作成するために一緒に文字列を連結しているので、あなたがSQLインジェクション攻撃に自分自身を開放していることです。あなたはそれをする代わりにパラメータを使うべきです。

SqlDataAdapter sdf = new SqlDataAdapter(
    "Select Count(*) From Login where [email protected] and [email protected]", con); 

command.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = metroTextBox1.Text; 
command.Parameters.Add("@Password", SqlDbType.NVarChar).Value = metroTextBox2.Text; 
+0

すごい努力を作るためのおかげで。私は盲目で、私は "テーブル"から "ログイン" idkにテーブル名を変更する方法を知らない。 brb –

+0

質問を追加すると、盲目的になったり酔ったりしました(笑)。私は古いテーブルを削除し、新しい名前を "Login" –

-1

は、このようなあなたのカウントに名前を設定しよう:

Select Count(*) as Nb From Login 
関連する問題