'为对象'AdminAssistant'提供的参数,该参数不是函数。如果要将参数用作表提示,则需要WITH关键字。

时间:2019-05-18 12:59:12

标签: asp.net sql-server c#-4.0

在将值插入数据库时​​,我遇到错误,主题中所说的错误不知道我缺少什么。

        string ImagePath = "";

        string str = "insert into AdminAssistant() values('"+TextBox7.Text+ "','" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + DropDownList2.Text + "','" + TextBox4.Text + "','" + DropDownList1.Text+ "','" + TextBox9.Text + "','"+ImagePath+"','"+DateTime.Now+"','Active')";
        SqlCommand cmd = new SqlCommand(str,con);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

        Label1.Text = "Admin Created Successfully.....!!!";
  

下面是查询

   Create Table AdminAssistant
  (
 A_ID int identity(1,1) not null primary key,
Aname varchar(20),
Aphone varchar(16),
Amail varchar(20),
A_Address varchar(150),
A_City varchar(20),
A_Gender varchar(10)NOT NULL CHECK (A_Gender IN('Male', 'Female')),
A_Password varchar(20),
Aroll varchar(20)NOT NULL CHECK (Aroll IN('SuperAdmin', 'Admin')),
MetaDescription varchar(256),
Media varchar(40),
RegisterDate datetime,
A_Status varchar(20)NOT NULL CHECK (A_Status IN('Active', 'Disable'))

)

我认为尽管存在错误,但仍应将此值插入数据库。

1 个答案:

答案 0 :(得分:2)

该错误可能是由表名后面的括号引起的,但这是一个简单的解决方法。
您真正的问题在于值的字符串连接。
在sql世界中这是一个禁忌,因为它可能是许多解析错误的根源(例如,值中存在单引号可能会破坏语法,并且 DateTime.Now 会被转换遵循规则的字符串,SQL解析器引擎并不总是能够理解。)

但是最重要的是Sql注入的可能性。
这里有一些链接可以帮助您开始发现这种巨大的安全风险
How can I explain Sql Injection without technical jargon
How does the SQL injection from the “Bobby Tables” XKCD comic work?

因此,唯一的解决方法是通过参数化查询。

string str = "insert into AdminAssistant 
              (Aname,Aphone,Amail,A_Address,A_City,A_Gender,A_Password,
               Aroll,MetaDescription,Media,RegisterDate,A_Status)
               values(@name,@phone,@mail,@address,@city,@gender,@pass
                      @roll,@descr,@media,@regdata,'Active')";
using(SqlConnection con = new SqlConnection(......))
using(SqlCommand cmd = new SqlCommand(str, con))
{
    con.Open();
    cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox7.Text; 
    ... other varchar parameters
    cmd.Parameters.Add("@regdataq", SqlDbType.DateTime).Value = DateTime.Now; 
    ... complete the parameters collection
    cmd.ExecuteNonQuery();
}        

而且,我忘了谈论将明文密码存储到数据库中的问题。这是您安全性的另一个非常重要的考虑因素。这是另一个包含有用信息的链接

Best way to store password in database