簡體   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