当我在下面运行我的代码时发生以下错误。我正在运行用户注册页面,其中包含名字,姓氏,用户名,密码等详细信息。 " 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();
}
答案 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注入攻击有很多参考。这是一个例子: