从asp.net更新SQL Server

时间:2015-04-25 19:50:42

标签: asp.net sql-server sql-update

当我运行它时,错误是什么,它给了我这个错误

  

字符串或二进制数据将被截断。   声明已经终止。

使用我从下拉列表中获取的ID进行更新。

代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string constr = "Data Source=YAZAN-PC ; initial Catalog=Elder ; user = sa ; pwd =****;";
        SqlConnection con = new SqlConnection(constr);
        string sql = "Select * from Users;";
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(sql, con);
        DataTable dt = new DataTable();
        da.Fill(dt);
        con.Close();
        DataRow dr = dt.NewRow();
        dr["ID"] = "0";

        dt.Rows.InsertAt(dr, 0);
        ddlID.DataSource = dt;

        ddlID.DataValueField = "ID";
        ddlID.DataBind();
    }
}

protected void btnUpdate_Click(object sender, EventArgs e)
{
    string constr = "Data Source = YAZAN-PC ;" +
                   "initial catalog = Elder;" +
                   "user = sa ; pwd = ****;";
    SqlConnection con = new SqlConnection(constr);
    string Sql =
    "Update Users Set Name=@Name , Gender=@Gender , Email=@Email ,UserType=@UserType, BirthDate=@BirthDate , Password=@Password, RePassword=@RePassword where ID=@ID;";
   con.Open();
    SqlCommand cmd = new SqlCommand(Sql, con);

    cmd.Parameters.AddWithValue("@Name", txtName.Text);
    cmd.Parameters.AddWithValue("@Gender", rblGender.SelectedValue);
    cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
    cmd.Parameters.AddWithValue("@UserType", rblUserType.SelectedValue);
    cmd.Parameters.AddWithValue("@BirthDate", txtBirthDate.Text);
    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
    cmd.Parameters.AddWithValue("@RePassword", txtRePassword.Text);
    cmd.ExecuteNonQuery();
    con.Close();
}

这是SQL Server中的表结构:

ID           int           not null primary key identity,
Name         nvarchar(50)  not null ,
Gender       Char(1)       not null ,
Email        nvarchar(50)  not null , 
UserType     char(1)       not null ,
BirthDate    date          not null ,
Password     nvarchar(50)  not null , 
RePassword   nvarchar(50)  not null 

1 个答案:

答案 0 :(得分:1)

在将字符串传递给SQL之前,需要检查字符串的长度。如果列的给定值超过指定的长度,则该语句将失败。

例如,Name被定义为VARCHAR(50),因此@Name中的字符串必须小于或等于50个字符。 51或更多将导致声明失败。

简单的if语句将执行此操作,例如:

if (txtName.Text.Length > 50)
{
    // throw an error, truncate the string, etc.
}

同样,您需要检查每个字符串,使其长度小于或等于DB列中的长度。

建议在客户端检查输入的长度(通过JavaScript或其他方法) - 这样您就可以向用户提供即时反馈,他们可以在提交信息之前对其进行更正。