当我尝试从文本框插入时,无法将值NULL插入到列中,但是当我直接插入它时工作正常

时间:2015-09-26 16:37:56

标签: asp.net sql-server database

当我尝试从ID =“USERNAME”的文本框插入数据时,我无法将数据插入到数据库中,即选择VALUES为@USERNAME,例如:InsertCommand =“INSERT INTO [Table12]( [USERNAME])VALUES( @USERNAME )“。 但如果我不选择从上面的文本框中插入数据,那么同样的工作绝对正常。

如果我在INSERT语句中使用上面的代码,我会收到以下错误。

“无法将值NULL插入列'USERNAME',表'D:\ LOGINCONTROL \ LONGINCONTROLTEM \ LONGINCONTROLTEM \ APP_DATA \ ASPNET-LONGINCONTROLTEM-20150905150101.MDF.dbo.Table12';列不允许空值.INSERT失败。 声明已经终止。“

下面的语句工作正常但不是上面的,因为在单击按钮后,文本“SOME VALUE”正确插入数据库,这证明此处没有连接问题。

例如:InsertCommand=“INSERT INTO [Table12]([USERNAME])VALUES('SOME DATA')”。

以下是我正在使用的完整代码。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="INPUTTODATABASE.aspx.cs" Inherits="LongincontrolTem.INPUTTODATABASE" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="testtest" runat="server">

      User Name:   <asp:TextBox ID="USERNAME" value="" runat="server" ></asp:TextBox>

        <asp:Button ID="SaveData" runat="server" Text="InsertData" OnClick="SaveData_Click" />


        <asp:SqlDataSource ID="InsertInformation" runat="server" DataSourceMode="DataSet"
          ConnectionString="Data Source=DECTO-PC;AttachDbFilename=|DataDirectory|\aspnet-LongincontrolTem-20150905150101.mdf;Integrated Security=True"
         InsertCommand="INSERT INTO [Table12] ([USERNAME]) VALUES (@USERNAME)"
          ProviderName="System.Data.SqlClient" >


<InsertParameters>
        <asp:Parameter Name="USERNAME" Type="Char" />

    </InsertParameters>

        </asp:SqlDataSource>


    </div>
    </form>
</body>
</html>

// **code behind page**
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace LongincontrolTem
{
    public partial class INPUTTODATABASE : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void SaveData_Click(object sender, EventArgs e)
        {
            SqlDataSource DataSourced = (SqlDataSource)FindControl("InsertInformation");



            DataSourced.Insert();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

看起来需要进行一些小的改动才能实现这个目标:

首先,您的InsertParameters应该引用您的TextBox,因为这是您提供值所需的内容。此外,您可能需要String而不是Char。尝试用以下内容替换该块:

<InsertParameters>
    <asp:ControlParameter Name="USERNAME" Type="String" ControlID="USERNAME" />
</InsertParameters>

接下来,您的SaveData_Click事件可以简化:

protected void SaveData_Click(object sender, EventArgs e)
{
    InsertInformation.Insert();
}