【问题标题】:Cannot insert the value NULL into column when I try to insert it from text box but works fine when I insert it directly当我尝试从文本框中插入值 NULL 时无法将其插入列,但当我直接插入时工作正常
【发布时间】:2015-09-26 16:37:56
【问题描述】:

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

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

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

下面的语句可以正常工作,但上面的不是,因为文本“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();
        }
    }
}

【问题讨论】:

  • 我在互联网上尝试了所有方法,但没有找到上述任何答案。我是一名新程序员,我觉得这是一个愚蠢的问题,但任何帮助都将不胜感激。
  • 看起来您从未设置过参数的值。因此,它默认为 NULL。我讨厌只给你一个链接,但是你看过这个页面中的例子吗? msdn.microsoft.com/en-us/library/fkzs2t3h.aspx。它展示了(以及许多其他内容)如何使用 TextBox 控件为参数提供值。
  • 感谢您的反馈,安。你认为这是唯一的问题吗?因为我尝试更改参数的值和字段,但不幸的是我的技巧都没有奏效......

标签: asp.net sql-server database


【解决方案1】:

看起来需要进行一些小改动才能使其正常工作:

首先,您的InsertParameters 应该引用您的文本框,因为这是您提供值所需的。此外,您可能需要String 类型而不是Char。尝试用类似的东西替换那个块:

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

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

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

【讨论】:

  • Michael McMullin - 你真是太棒了!它现在正在工作......非常感谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2018-04-21
  • 2015-03-09
  • 2011-09-29
  • 2016-06-26
  • 1970-01-01
相关资源
最近更新 更多