如何插入表asp.net C#

时间:2017-07-16 20:34:39

标签: c# asp.net asp.net-webpages

我正在尝试将注册页面中的值插入表login_tbl

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);

conn.Open();

string insertQ = "INSERT INTO login_tbl (empid,first_name,last_name,team_name,pwd,email_id,extension) VALUES('" + empbox.Text + "','" + fnamebox.Text + "','" + lnamebox.Text + "','" + teamnamebox.SelectedItem.Text + "','" + passwordbox.Text + "','" + emailbox.Text + "','" + extensionbox.Text + "')";

SqlCommand com = new SqlCommand(insertQ, conn);

com.ExecuteNonQuery();
Response.Write("registration done");

我在com.ExecuteNonQuery();行上收到错误。它将进入异常

  

错误:System.Data.SqlClient.SqlException(0x80131904):字符串或   二进制数据将被截断。该语句已终止。在   System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   布尔值breakConnection,Action1 wrapCloseInAction)at   System.Data.SqlClient.SqlInternalConnection.OnError(SqlExcep重刑   exception,Boolean breakConnection,Action1 wrapCloseInAction)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TDS ParserStateObject   stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)at   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,

2 个答案:

答案 0 :(得分:3)

我认为你在这里缺少添加参数,我想知道你为什么不添加这样的值:

VALUES(@param1,@param2,@param3)";

我认为以这种方式添加它们会更简单吗?

试试这个:

using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString))
{
     connection.Open();

    string insertQ = "INSERT INTO login_tbl (empid,first_name,last_name,team_name,pwd,email_id,extension) VALUES(@param1,@param2,@param3,@param4,@param5,@param6,@param7)";

        SqlCommand cmd = new SqlCommand(sql,connection);
        cmd.Parameters.Add("@param1", SqlDbType.Int).value = empid;
        cmd.Parameters.Add("@param2", SqlDbType.Varchar, 50).value=first_name;
        cmd.Parameters.Add("@param3", SqlDbType.Varchar, 50).value=last_name;
        cmd.Parameters.Add("@param4", SqlDbType.Varchar, 50).value = team_name;
        cmd.Parameters.Add("@param5", SqlDbType.Varchar, 50).value = pwd;
        cmd.Parameters.Add("@param6", SqlDbType.Int).value = email_id;
        cmd.Parameters.Add("@param7", SqlDbType.Varchar, 50).value = extension;
        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
}
Response.Write("registration done");

答案 1 :(得分:0)

其中一个值太长。您需要对服务器端进行验证,以防止发生异常。检查您要保存的所有字段,无论它们是否在所有方面都有效,包括但不限于它们的长度。如果它们碰巧无效,请向客户端发送有意义的错误消息并在那里处理问题。现在,当您修复了异常的原因后,请确保在客户端可以确定有效性的所有情况下,无法从浏览器向服务器发送无效输入,这将减少服务器负载释放所有无效请求的负担。

现在,当您进行验证时,您还需要考虑其他方面。您的代码容易受到SQL injection的攻击。您可以自行转义值并正确处理它们,也可以使用能够为您执行此操作的内容,例如parameterized queries。由于您有SQL注入漏洞,因此可以安全地假设您还有XSS注入漏洞。如果你有的话,请确保你也能解决这个问题。