繁体   English   中英

从asp.net更新SQL Server

[英]Update SQL Server from asp.net

当我运行它时,这是什么错误呢?

字符串或二进制数据将被截断。 该语句已终止。

它是使用ID从下拉列表中获取的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 

您需要先检查字符串的长度,然后再将其传递给SQL。 如果列的给定值超过指定的长度,则该语句将失败。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM