SQL Exception未在用户代码中处理

时间:2016-11-21 00:20:25

标签: sql-server exception-handling arguments

当我在下面运行我的代码时发生以下错误。我正在运行用户注册页面,其中包含名字,姓氏,用户名,密码等详细信息。 " ID"是我的主要关键。错误:"类型' System.ArgumentException'的异常发生在System.Data.dll中但未在用户代码中处理 附加信息:初始化字符串的格式不符合从索引0开始的规范。"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;


namespace WebApplication_Assignment
{
    public partial class User_Registration_WebForm : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button_SubmitUserReg_Click(object sender, EventArgs e)
        {
            //Response.Write("Your registration is successful");

            string sql = "SELECT * from User_Table where User_Name = @username";

            using (SqlConnection connection = new SqlConnection("ConnectionString"))
            using (SqlCommand command = new SqlCommand(sql, connection))
{
    var userParam = new SqlParameter("username", SqlDbType.VarChar);
    userParam.Value = TextBox_UserName.Text;

    command.Parameters.Add(userParam);

    var results = command.ExecuteReader();
}

1 个答案:

答案 0 :(得分:0)

因为您没有使用参数,所以您的姓氏(姓氏)几乎肯定是“O'Sullivan”。请参阅单引号;它导致TSQL语句不正确地形成。

如果你连接字符串,就会遇到类似这样的问题,并开启SQL注入攻击。始终使用参数。

这是一个简单的例子:

string sql = "SELECT * from employee where username = @username";

using (SqlConnection connection = new SqlConnection("connection string")
using (SqlCommand command = new SqlCommand(sql, connection))
{
    var userParam = new SqlParameter("username", SqlDbType.VarChar);
    userParam.Value = txtUsername.Text;

    command.Parameters.Add(userParam);

    var results = command.ExecuteReader();
}

对SO的SQL注入攻击有很多参考。这是一个例子:

Why do we always prefer using parameters in SQL statements?