簡體   English   中英

如果我不從asp.net的imageupload控件中選擇圖像,我想在數據庫中插入null

[英]I want to insert null in database if i dont choose an image from imageupload control in asp.net

我有一個FileUpload控件,當我不插入圖像時,我想將DBNull插入數據庫。 到目前為止,我只有DBNull.Value錯誤。 該表允許ImageData null。

這是代碼:

protected void button_sign_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile == true)
    {
        string str = FileUpload1.FileName;
        FileUpload1.PostedFile.SaveAs(Server.MapPath("~/userimage/" + str));
        string Image = "~/userimage/" + str.ToString();
        string name = username_textbox.Text;
        string email = email_textbox.Text;
        string pass = password_textbox.Text;

        string CS = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("insert into Register values(@Username, @Email, @Password, @ImageData)", con);
            cmd.Parameters.AddWithValue("@Username", name);
            cmd.Parameters.AddWithValue("@Email", email);
            cmd.Parameters.AddWithValue("@Password", pass);
            cmd.Parameters.AddWithValue("@ImageData", Image);

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

            lblMsg.Text = "Înregistrare cu succes";
            Response.AddHeader("REFRESH", "2;URL=login.aspx");
        }
    }
    else
    {
         lblMsg.Text = "Error";
    }
}

這樣就足夠了

cmd.Parameters.AddWithValue("@ImageData", FileUpload1.HasFile ? Image: DbNull.Value);

還要重構一下代碼:

string image = "";
if (FileUpload1.HasFile==true)
{
    string str = FileUpload1.FileName;
    FileUpload1.PostedFile.SaveAs(Server.MapPath("~/userimage/" + str));
    image  = "~/userimage/" + str.ToString();
}

string name = username_textbox.Text;
string email = email_textbox.Text;
string pass = password_textbox.Text;

String connString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
using (SqlConnection con = new SqlConnection(connString))
{
    SqlCommand cmd = new SqlCommand("insert into Register values(@Username,@Email,@Password,@ImageData)", con);

    cmd.Parameters.AddWithValue("@Username", name);
    cmd.Parameters.AddWithValue("@Email", email);
    cmd.Parameters.AddWithValue("@Password", pass);
    cmd.Parameters.AddWithValue("@ImageData", FileUpload1.HasFile ? image: DbNull.Value);

    con.Open();
    cmd.ExecuteNonQuery();       
}

lblMsg.Text = "Înregistrare cu succes";
Response.AddHeader("REFRESH", "2;URL=login.aspx");

不要以UpperCase字母開頭變量。

如果您在開始時設置Image的值,則其余代碼將保持通用。

protected void button_sign_Click(object sender, EventArgs e)
{
    object Image;
    if (FileUpload1.HasFile==true)
    {
        string str = FileUpload1.FileName;
        FileUpload1.PostedFile.SaveAs(Server.MapPath("~/userimage/" + str));
        Image = "~/userimage/" + str.ToString();
    }
    else {
        Image = System.DBNull.Value;
    }

    string name = username_textbox.Text;
    string email = email_textbox.Text;
    string pass = password_textbox.Text;

    String CS = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    using(SqlCommand cmd = new SqlCommand("insert into Register values(@Username,@Email,@Password,@ImageData)", con))
    {
        // pick the appropriate SqlDbType type for each parameter
        cmd.Parameters.Add(new SqlParameter("@Username", SqlDbType.VarChar){Value = name});
        cmd.Parameters.Add(new SqlParameter("@Email", SqlDbType.VarChar){Value = email});
        cmd.Parameters.Add(new SqlParameter("@Password", SqlDbType.VarChar){Value = pass});
        cmd.Parameters.Add(new SqlParameter("@ImageData", SqlDbType.VarChar){Value = Image});

        con.Open();
        cmd.ExecuteNonQuery();
        lblMsg.Text = "Înregistrare cu succes";
        Response.AddHeader("REFRESH", "2;URL=login.aspx");
    }

雖然其他一些筆記

  • 您應該在參數中使用SqlDbType指定數據庫類型,以確保ado.net代碼正確轉換了值。
  • 也將Command包裹在using塊中
  • 無需關閉連接, using塊將為您處理。
  • 請勿以明文形式存儲密碼。 而是存儲密碼的鹽值哈希。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM