如何使用asp.net将dropdownlist中的空值添加到sql server

如何使用asp.net将dropdownlist中的空值添加到sql server,asp.net,database,Asp.net,Database,我在SQL server中创建了两个表,它们是: tbl学生: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title

我在SQL server中创建了两个表,它们是:

tbl学生:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td>
                    <asp:Label ID="Label1" runat="server" Text="StudentName"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="txtStudentName" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="Label2" runat="server" Text="Province"></asp:Label>
                </td>
                <td>
                    <asp:DropDownList ID="ddlProvince" runat="server"></asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Default4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //bound data from TblProvince to ddlProvince 
            using (SqlConnection con  = DBManager.getConnection())
            {
                string sql = @"Select ProvinceId, Province From TblProvince";
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                DataSet ds = new DataSet();
                da.Fill(ds, "dtProvince");
                ddlProvince.DataSource = ds.Tables["dtProvince"];
                ddlProvince.DataValueField = "ProvinceId";
                ddlProvince.DataTextField = "Province";
                ddlProvince.DataBind();
                ddlProvince.Items.Insert(0, new ListItem("Please Select", "NULL"));
            }
        }
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        using (SqlConnection con = DBManager.getConnection())
        {
            string sql = @"Insert Into TblStudent(Name, ProvinceId) Values(@Name, @ProvinceId)";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.Add("@Name", SqlDbType.NChar).Value = txtStudentName.Text;
            cmd.Parameters.Add("@ProvinceId", SqlDbType.Int).Value = Convert.ToInt32(ddlProvince.SelectedValue);
            con.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

tbl省:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td>
                    <asp:Label ID="Label1" runat="server" Text="StudentName"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="txtStudentName" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="Label2" runat="server" Text="Province"></asp:Label>
                </td>
                <td>
                    <asp:DropDownList ID="ddlProvince" runat="server"></asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Default4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //bound data from TblProvince to ddlProvince 
            using (SqlConnection con  = DBManager.getConnection())
            {
                string sql = @"Select ProvinceId, Province From TblProvince";
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                DataSet ds = new DataSet();
                da.Fill(ds, "dtProvince");
                ddlProvince.DataSource = ds.Tables["dtProvince"];
                ddlProvince.DataValueField = "ProvinceId";
                ddlProvince.DataTextField = "Province";
                ddlProvince.DataBind();
                ddlProvince.Items.Insert(0, new ListItem("Please Select", "NULL"));
            }
        }
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        using (SqlConnection con = DBManager.getConnection())
        {
            string sql = @"Insert Into TblStudent(Name, ProvinceId) Values(@Name, @ProvinceId)";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.Add("@Name", SqlDbType.NChar).Value = txtStudentName.Text;
            cmd.Parameters.Add("@ProvinceId", SqlDbType.Int).Value = Convert.ToInt32(ddlProvince.SelectedValue);
            con.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

在Asp.net设计表单中:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td>
                    <asp:Label ID="Label1" runat="server" Text="StudentName"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="txtStudentName" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="Label2" runat="server" Text="Province"></asp:Label>
                </td>
                <td>
                    <asp:DropDownList ID="ddlProvince" runat="server"></asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Default4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //bound data from TblProvince to ddlProvince 
            using (SqlConnection con  = DBManager.getConnection())
            {
                string sql = @"Select ProvinceId, Province From TblProvince";
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                DataSet ds = new DataSet();
                da.Fill(ds, "dtProvince");
                ddlProvince.DataSource = ds.Tables["dtProvince"];
                ddlProvince.DataValueField = "ProvinceId";
                ddlProvince.DataTextField = "Province";
                ddlProvince.DataBind();
                ddlProvince.Items.Insert(0, new ListItem("Please Select", "NULL"));
            }
        }
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        using (SqlConnection con = DBManager.getConnection())
        {
            string sql = @"Insert Into TblStudent(Name, ProvinceId) Values(@Name, @ProvinceId)";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.Add("@Name", SqlDbType.NChar).Value = txtStudentName.Text;
            cmd.Parameters.Add("@ProvinceId", SqlDbType.Int).Value = Convert.ToInt32(ddlProvince.SelectedValue);
            con.Open();
            cmd.ExecuteNonQuery();
        }
    }
}
问题:
当我没有在DDL中选择为什么将其保存到数据库时,它会显示一个错误
输入字符串的格式不正确。

它会抛出“输入字符串的格式不正确”错误,因为您正在尝试将null转换为Int

cmd.Parameters.Add("@ProvinceId", SqlDbType.Int).Value = Convert.ToInt32(ddlProvince.SelectedValue);
在将SelectedValue转换为Int之前,您可以检查它是否为null,如下所示

cmd.Parameters.Add("@ProvinceId", SqlDbType.Int).Value = (ddlProvince.SelectedValue == null) ? null :  Convert.ToInt32(ddlProvince.SelectedValue)

你得到的错误是什么?你的问题是什么?我知道你提到了你的qst,你能扩展一个位吗?请在保存时检查此解决方案。单击尝试检查
如果(ddlprovince.SelectedValue!=null){//输入保存操作}否则{//通过消息选择下拉值}
确定!!当我在没有选择dropdownlist的情况下将数据保存到数据库时,会显示错误“输入字符串的格式不正确”。但当我在dropdownlist中选择其他项目时,它没有任何错误。您尝试过我的方法吗?我的方法是,如果ddl值为null,DB将不会命中,因此将null值添加到表中的可能性较小OK谢谢让我再试一次。。。