2017-01-09 88 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

歡迎堆棧溢出時會自動管理SqlConnection,這樣你就不需要調用Open()Close()!請閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

+3

請檢查您的SQL語句並瞭解如何使用參數來避免SQL注入 – sjramsay

回答

0

您錯過了=登錄您的sql。

此外,您應該通過使用SqlParameter來清理數據庫輸入,而不是對字符串進行簡化。如果您繼續實施,您正在設置自己的SQL注入。

另外一個優化是,SqlDataAdapter使用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的( 「選擇狀態由Login1其中username'」 + textBox1的.Text +「'AND Parola ='」+ textBox2.Text +「'」,con);

更改此行

SqlDataAdapter的SDA =新SqlDataAdapter的( 「SELECT狀態從Login1其中username = '」 + textBox1.Text + 「 'AND帕羅拉='」 + textBox2.Text + 「'」,CON );

您忘記了=號。

+0

謝謝!解決了問題! – TFAndrewPH

相關問題