System.Data.SqlClient.SqlException单击button1时出错

时间:2016-10-07 19:09:12

标签: c# sql sql-server database exception

类型' System.Data.SqlClient.SqlException'的第一次机会异常。发生在System.Data.dll

其他信息:无效的对象名称'登录'。

这里的守则:

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

2 个答案:

答案 0 :(得分:0)

消息非常清楚:您的数据库中没有名为Login的对象(表,视图)。您的查询正在尝试从该对象中进行选择。

Select Count(*) From Login where...

这里更大,更重要的问题是,您正在打开SQL注入攻击,因为您将字符串连接在一起以创建查询。您应该使用参数而不是这样做。

SqlDataAdapter sdf = new SqlDataAdapter(
    "Select Count(*) From Login where Username=@UserName and Password=@Password", con);

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

答案 1 :(得分:-1)

尝试将名称设置为您的计数:

    Select Count(*) as Nb From Login