C#连接到SQL数据库错误

C#连接到SQL数据库错误,c#,asp.net,sql-server,message,C#,Asp.net,Sql Server,Message,我完全是编程新手。我的程序有问题,我正在尝试创建一个注册页面,以便用户可以注册,并将其保存到SQL数据库中,但我遇到了一个错误,我不知道这意味着什么,我将粘贴整个错误消息抱歉,如果它不具体。如果可能的话,请给我简单解释一下,谢谢 这是我的密码: protected void registerBtn_Click(object sender, EventArgs e) { String conString = @"Data Source=sql-server;Initial Catalog

我完全是编程新手。我的程序有问题,我正在尝试创建一个注册页面,以便用户可以注册,并将其保存到SQL数据库中,但我遇到了一个错误,我不知道这意味着什么,我将粘贴整个错误消息抱歉,如果它不具体。如果可能的话,请给我简单解释一下,谢谢


这是我的密码:

protected void registerBtn_Click(object sender, EventArgs e)
{
    String conString = @"Data Source=sql-server;Initial Catalog=wa310;Integrated Security=True";
    SqlConnection myConnection = new SqlConnection(conString);

    string cmd = "INSERT INTO Student( First_Name, Surname, User_ID, Password) VALUES ( '" + fNameTxt.Text + "' , '" + sNameTxt.Text + "','" + userIdTxt.Text + "' ,'" + passwordTxt.Text + "')";
    SqlCommand myCommand = new SqlCommand(cmd, myConnection);

    try
    {
      myCommand.Connection = myConnection;
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        Label1.Text = "You have successfully registered";
    }
    catch (Exception ex)
    {
        Label1.Text = "Exception in DBHandler" + ex;
    }
    finally
    {
        myConnection.Close();
    }

}

这是我收到的错误,再次为长长的错误消息感到抱歉:

DBHandlerSystem.Data.SqlClient.SqlException(0x80131904)中的异常: 字符串或二进制数据将被截断。声明已被修改 结束。在 System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔断开连接,操作
1 wrapCloseInAction)位于
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
异常,布尔断开连接,操作
1 wrapCloseInAction)位于 System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj、布尔调用方连接锁、布尔异步关闭)位于 System.Data.SqlClient.TdsParser.TryRun(运行行为, SqlCommand cmdHandler、SqlDataReader数据流、, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj、Boolean和dataReady)位于 System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTds(字符串 methodName、布尔异步、Int32超时、布尔异步写入)位于 System.Data.SqlClient.SqlCommand.InternalExecuteOnQuery(TaskCompletionSource`1 完成,字符串方法名,布尔sendToPipe,Int32超时, 布尔异步(写)在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()位于 OnlineExamCW.Register.registerBtn\u在 f:\COMP1551-应用程序和Web Development\OnlineExamCW\OnlineExamCW\Register.aspx.cs:第31行 客户连接ID:e08ebbe3-d4be-4a76-a64d-14aadb6e9d4c


请告诉我这个错误是什么意思。非常感谢。

这意味着您要插入到学生表中的一个或多个字段中的数据的字符数超过了字段允许的字符数。检查所有字段的长度-姓名、姓氏、用户ID、密码。增加数据库中的字段长度或对数据输入页面进行限制,以便用户在每个字段中输入的字符数不超过允许的字符数。

错误消息告诉您,输入值中的某些内容太长,无法存储在指定列中。在不知道列大小的情况下,很难提出正确的解决方案,因此,假设您在数据库字段中有合理的限制,如此模式中所示:

First_Name nvarchar(50)
Surname nvarchar(50)
User_ID int
Password nvarchar(16)
然后,您应该将输入字段的最大长度限制为datatable字段允许的相同大小

<asp:TextBox ID="fNameTxt" MaxLength="50" Text="" runat="server"/>
.....
请注意,在这段代码中,我完全删除了字符串连接方法。这是编写sql语句的一种非常危险的模式,因为使用这种技术很容易被黑客攻击,如果有人在输入值中输入一个引号,代码可能会失败(例如,尝试使用O'Reilly这样的姓氏)


还有一点需要深入重新设计。以明文形式存储密码被认为是一种非常糟糕的做法,因为只需查看数据库表就可以发现所有学生的密码。但这是一个更复杂的问题。如果您有兴趣搜索

,则错误消息会告诉您,输入值中的某些内容太长,无法存储在指定列中。请显示当前数据库中的表Student的架构。谢谢。在SQL数据库上犯了一个愚蠢的错误,我没有添加字段长度。非常感谢
protected void registerBtn_Click(object sender, EventArgs e)
{
    String conString = "....";
    string cmd = @"INSERT INTO Student( First_Name, Surname, User_ID, Password) 
                   VALUES (@first, @surname, @id, @password);"
    using(SqlConnection myConnection = new SqlConnection(conString))
    using(SqlCommand myCommand = new SqlCommand(cmd, myConnection))
    {
        myCommand.Parameters.Add(new SqlParameter() 
        {
           ParameterName = "@first",
           Value= fNameTxt.Text, 
           SqlDbType = SqlDbType.NVarChar,
           Size = 50
        });

        myCommand.Parameters.Add(new SqlParameter
        {
             ParameterName = "@surname",
             Value= sNameTxt.Text, 
             SqlDbType = SqlDbType.NVarChar,
             Size = 50
        });
        myCommand.Parameters.Add(new SqlParameter() 
        {
             ParameterName = "@id",
             Value= Convert.ToInt32(userIdTxt.Text), 
             SqlDbType = SqlDbType.Int
        });
        myCommand.Parameters.Add(new SqlParameter() 
        {
             ParameterName = "@password",
             Value= passwordTxt.Text, 
             SqlDbType = SqlDbType.NVarChar,
             Size = 16
        });

        myCommand.Connection = myConnection;
        myConnection.Open();
        if(myCommand.ExecuteNonQuery() > 0)
            Label1.Text = "You have successfully registered";
    }
}