首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 列“id”不允许空值? [无满意答案结贴,结贴人:jpngg]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 22:48:04 楼主
    页面放了两个文本框TEXTBOX1,TEXTBOX2分别通过数据集向数据库插入“标题”和“内容”。数据库中另有序号id列为主键列。通过文本框插入一行时提示错误:
    列“id”不允许空值.
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
    异常详细信息: System.Data.NoNullAllowedException: 列“id”不允许空值。
    源错误:
    行 210:
    行 211:
    行 212:        DataSet11.news.Rows.Add(anyRow)

    数据库id列已设置自动增长还是不行,哪儿的问题?
    如果是数据集中的id需要赋值的话,怎么赋值才能和才能和数据库中的一致?

    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 22:54:221楼 得分:0
    好像你的ID不是自增的,你仔细看下!再就是DEBUG,把你的SQL 直接放到查询分析器中运行,或者到事件查看器中看下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 01:12:292楼 得分:0
    添加的时候要对应好字段!
    如果ID是自增的,就添加另外两个就行了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 03:24:093楼 得分:0
    DataSet11.news.Rows.Add(anyRow) ?
    ---------------------------------
    那你是生成强类型数据集了吧?
    news是DataTable的名字?


    我不知道你是怎样增加新行的。一般来讲增加记录应该是这么个顺序,其中X,XX根据你建的表定:

    DataSetXTableAdapters.XXTableAdapter adapter = new DataSetXTableAdapters.XXTableAdapter();
    DataSetX.XXDataTable tab = new DataSetX.XXDataTable();
    DataSetX.XXRow row = tab.NewXXRow();
    row.字段名=值;
    ... // 不给ID自增且Primarykey的列赋值。
    tab.AddXXRow(row);
    adapter.Update(tab);


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 06:24:304楼 得分:0
    C# code
    //DataSet11.news.Rows.Add(anyRow) ; ;DataRow anyRow = DataSet1.Tables[].NewRow(); //anyRow = ... DataSet1.Tables[0].Rows.Add(anyRow);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 09:27:385楼 得分:0
    你把id设为了主键,不代表就已经是自动增长了。
    如果你只想写入2个字段,那就把你的id设为自动增长型
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 09:36:126楼 得分:0
    检查一下你的些Table 的ID 列在数据库中是否设为自动增长.., 或者把你的Sql 取出来拿到Sql数据库分析器里直接Run 看数据库报什么错误,再根据报的错误对应解决
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 09:52:087楼 得分:0
    引用 1 楼 sunxw18 的回复:
    好像你的ID不是自增的,你仔细看下!再就是DEBUG,把你的SQL 直接放到查询分析器中运行,或者到事件查看器中看下!


    id已设置为标识:是;标识种子:1;标识递增量:1
    我不知道为什么既然设置了id为什么不能自增。
    查询分析器,事件查看器没用过,我新手,知识盲点,等之后看一下。
    SQL语句应该没问题:
    INSERT INTO news(标题,内容) Values(@标题,@内容)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 10:09:138楼 得分:0
    代码大致这样(要求按页面BUTTON1按钮,可以通过数据集news表向数据库news表插入记录):
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            SqlDataAdapter1.UpdateCommand.Connection() = SqlConnection1
            SqlDataAdapter1.SelectCommand = New SqlClient.SqlCommand("Select * from news", SqlConnection1)
            SqlDataAdapter1.Fill(DataSet11, "news")

            Dim sqlstr As String
            sqlstr = "INSERT INTO news(标题,内容) Values(@标题,@内容)"
            '@标题,@内容通过数据适配器属性配置已经定义
            SqlDataAdapter1.InsertCommand().CommandText = sqlstr

            Dim anyRow As DataRow = DataSet11.news.NewRow
            anyRow("标题") = TextBox1.Text
            anyRow("内容") = TextBox2.Text
            DataSet11.news.Rows.Add(anyRow)

            If DataSet11.HasChanges() Then
                Response.Write("ok")
            Else
                Response.Write("no")
            End If

            SqlDataAdapter1.Update(DataSet11, "news")
            DataSet11.news.AcceptChanges()

            SqlDataAdapter1.Fill(DataSet11, "news")
            SqlDataAdapter1.Dispose()
        End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 11:01:349楼 得分:0
    你是否在数据库(sql,access)中,设置了id为自动增长,
    sqlstr = "INSERT INTO news(标题,内容) Values(@标题,@内容)"
    你这个是不是通过存储方式来插入的,如果是,那你的存储方式也要设置一下,就是你插入的时候只有两个值,而不是三个值,id值是自动的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 11:41:1110楼 得分:0
    引用 9 楼 wlj11111 的回复:
    你是否在数据库(sql,access)中,设置了id为自动增长,
    sqlstr = "INSERT INTO news(标题,内容) Values(@标题,@内容)"
    你这个是不是通过存储方式来插入的,如果是,那你的存储方式也要设置一下,就是你插入的时候只有两个值,而不是三个值,id值是自动的。

    就是在数据库中设的自动增长啊。
    SQL语句不是存储过程。
    插入的时候是两个值,通过两个文本框赋值了,上面代码中没有给数据集中的id赋值。
    我就觉得奇怪了,怎么就塞不进去!
    数据库id列已设置自动增长了,还提示列“id”不允许空值。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 20:30:1911楼 得分:0
    下午看了一下查询分析器
    SQL数据库查询分析器里面选工具-对象浏览器-在新窗口中编辑对象脚本-插入:

    INSERT INTO [pubs].[dbo].[news]([id], [标题], [内容])
    VALUES( <id,int,>, <标题,nvarchar(50),>, <内容,nvarchar(2000),>)

    运行后报错:
    服务器: 消息 170,级别 15,状态 1,行 2
    第 2 行: ' <' 附近有语法错误。

    这究竟是什么语法错误?看不出来呀!
    难道是id的数据种类int没有出来位数?数据库里面设置了4位,数据集中的数据适配器配置时参数集合里也设了4位,这儿怎么没出来?不显示吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 09:02:0312楼 得分:0
    数据库设计的问题.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 12:11:3113楼 得分:0
    引用 12 楼 dqlfjy 的回复:
    数据库设计的问题.

    哪里有问题?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 13:38:0714楼 得分:0
    确定一下你的id是否真的是自增
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 13:46:3115楼 得分:0
    引用 14 楼 tinalucky 的回复:
    确定一下你的id是否真的是自增

    id已设置为标识:是;标识种子:1;标识递增量:1
    查询分析器里有报错,说明语句可能有问题,但我不知道错在哪儿。

    查询分析器插入语句后:
    INSERT INTO [pubs].[dbo].[news]([id], [标题], [内容])
    VALUES( <id,int,>, <标题,nvarchar(50),>, <内容,nvarchar(2000),>)

    运行后报错:
    服务器: 消息 170,级别 15,状态 1,行 2
    第 2 行: ' <' 附近有语法错误。


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 14:09:3416楼 得分:0
    最好设计成自增长的
    identity(1,1)
    不是的话就要自己手动添加参数
    先select max(id) from T_Xx
    然后id值 = max(id) +1
    再添加1列
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 14:09:4317楼 得分:0
    在SQL企业管理器里面添加记录时id列可以自动增加。
    VS设计器里运行程序就出现列“id”不允许空值的报错。
    数据适配器配置向导自动配置生成的INSERT等语句,没有做更改。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 16:59:5118楼 得分:0
    id是不是int型啊?
    id有没有设置成主键啊?
    如果都设置了,也设置自增了,那就奇怪了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 19:44:5219楼 得分:0
    有谁知道下面查询分析器语法错误还可以怎么检查:

    查询分析器插入语句后:
    INSERT INTO [pubs].[dbo].[news]([id], [标题], [内容])
    VALUES( <id,int,>, <标题,nvarchar(50),>, <内容,nvarchar(2000),>)

    运行后报错:
    服务器: 消息 170,级别 15,状态 1,行 2
    第 2 行: ' <' 附近有语法错误。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 14:24:1820楼 得分:0
    如果不给数据集中的id列赋值,让数据库中的id列自动增长的话,即:
            ...
            Dim anyRow As DataRow = DataSet11.news.NewRow
            anyRow("标题") = TextBox1.Text
            anyRow("内容") = TextBox2.Text
            DataSet11.news.Rows.Add(anyRow)
            SqlDataAdapter1.Update(DataSet11, "news")
            ...
    将产生异常详细信息: System.Data.NoNullAllowedException: 列“id”不允许空值。

    如果给数据集中的id列赋值,即:
            ...
            Dim anyRow As DataRow = DataSet11.news.NewRow
            anyRow("标题") = TextBox1.Text
            anyRow("内容") = TextBox2.Text
            DataSet11.news.Rows.Add(anyRow)
            SqlDataAdapter1.Update(DataSet11, "news")
            anyRow("id") = DataSet11.news.Rows.Count + 1
            ...
    数据库中就可以插入一行了,怪哉!




    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 14:28:4121楼 得分:0
    虽说可以插入一行了,但查询分析器中分析SQL语句还是报错!
    不知道那个语法错误指哪儿?
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved