C# 如何在asp.net C表中插入#

C# 如何在asp.net C表中插入#,c#,asp.net,asp.net-webpages,C#,Asp.net,Asp.net Webpages,我正在尝试将注册页面中的值插入表login\u tbl: SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); conn.Open(); string insertQ = "INSERT INTO login_tbl (empid,first_name,last_name,team_name

我正在尝试将注册页面中的值插入表
login\u 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异常, 布尔断开连接,Action1 wrapCloseInAction)位于 System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXEP‌​激动 异常,布尔断开连接,Action1 wrapCloseInAction)位于 System.Data.SqlClient.TdsParser.throweexception和warning(Tds‌​ParserStateObject stateObj、布尔调用方连接锁、布尔异步关闭)位于 System.Data.SqlClient.TdsParser.TryRun(运行行为


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

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");

其中一个值太长。您需要对必须的值进行服务器端验证,以防止发生异常。请检查要保存的所有字段是否在各个方面都有效,包括但不限于其长度。如果恰好无效,请向客户端a发送有意义的错误消息现在,当您修复了异常的原因后,首先确保无效输入不会从浏览器发送到服务器。对于所有可以在客户端确定有效性的情况,这将通过释放所有无效请求的负担来减少服务器负载


现在,当您进行验证时,您还需要考虑其他方面。您的代码容易受到攻击。您可以自己转义这些值并正确处理它们,或者使用一些可以为您做到这一点的方法,例如。由于您存在SQL注入漏洞,因此可以安全地假设您也存在注入漏洞。如果您有异常,请确保您也修复了它。

是否要告诉我们异常错误消息?错误:System.Data.SqlClient.SqlException(0x80131904):字符串或二进制数据将被截断。语句已终止。在System.Data.SqlClient.SqlConnection.OnErrorSystem.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔断开连接,操作<代码>1 wrapCloseInAction)(SqlException异常,布尔断开连接,操作<代码>1 wrapCloseInAction)(SqlException异常,布尔断开连接,操作
1 wrapCloseInAction)位于System.Data.SqlClient.TdsParser.ThroweException(位于System.Data.SqlClient.TdsParser.TryRun的TdsParserStateObject stateObj、布尔调用连接锁、布尔异步关闭)(RunBehavior RunBehavior,这意味着您的输入对于接收字段来说太长。您可以使用参数化查询来解决此问题以及更严重的Sql注入问题,在该查询中,您可以为每个参数指定值的类型和大小。OK..我将尝试您所说的。调用存储过程是否有助于解决此问题?是的如果您为参数指定了正确的大小,SP可以帮助您解决问题。但是对于这些琐碎的插入,我不会编写SP,而是编写一个适当的参数化查询,应用正确的参数大小。下面的答案有一个很好的起点。此外,如果empid是数字,那么我会将其设置为标识列,并让数据库在插入时选择一个新值。他可能想要
SqlDbType.NVarChar
,并且需要用列的实际大小替换
50
s。@DourHighArch这是真的,我只是提供了一个示例,我想他会明白的,我真的希望如此,但谢谢你的评论出来