首页 新闻 会员 周边

为什么数据库插不进

0
悬赏园豆:5 [已解决问题] 解决于 2012-05-27 18:51

使用的SQL Server 2008 为什么数据插不进啊

问题补充:

不能将值 NULL 插入列 'OrderID',表 'Shopping.dbo.Order';列不允许有 Null 值。INSERT 失败。
语句已终止。  为什么会有这个错啊

小柑的主页 小柑 | 初学一级 | 园豆:6
提问于:2012-05-27 12:01
< >
分享
最佳答案
0

肯定有错误的,你看下错误信息是什么。

收获园豆:5
无之无 | 大侠五级 |园豆:5095 | 2012-05-27 12:12

在哪里看错误信息啊

小柑 | 园豆:6 (初学一级) | 2012-05-27 12:22

        public int AddOrder(string sql,Order order)
        {
            int i;
            try
            {
                openCon();
                cmd = new SqlCommand(sql, con);
                cmd.CommandType = CommandType.StoredProcedure;
                #region
                SqlParameter[] pars = new SqlParameter[] {
                    new SqlParameter("@UserID", SqlDbType.VarChar, 20),
                    new SqlParameter("@PayWay", SqlDbType.VarChar,20),
                    new SqlParameter("@SendWay", SqlDbType.VarChar,20),
                    new SqlParameter("@OrderTime", SqlDbType.DateTime),
                    new SqlParameter("@TotelNumber", SqlDbType.Int),
                    new SqlParameter("@TotelPrice", SqlDbType.Money),
                    new SqlParameter("@OrderStatus", SqlDbType.VarChar,20),
                    new SqlParameter("@ReceiverName", SqlDbType.VarChar,20),
                    new SqlParameter("@ReceiverPhone", SqlDbType.VarChar,20),
                    new SqlParameter("@ReceiverAddr", SqlDbType.VarChar,20),
                    new SqlParameter("@ReceiverPostcode", SqlDbType.VarChar,20),
                };
                pars[0].Value = order.UserID;
                pars[1].Value = order.PayWay;
                pars[2].Value = order.SendWay;
                pars[3].Value = order.OrderTime;
                pars[4].Value = order.TotelNumber;
                pars[5].Value = order.TotelPrice;
                pars[6].Value = order.OrderStatus;
                pars[7].Value = order.ReceiverName;
                pars[8].Value = order.ReceiverPhone;
                pars[9].Value = order.ReceiverAddr;
                pars[10].Value = order.ReceiverPostcode;
#endregion
                foreach (SqlParameter parameter in pars)
                {
                    cmd.Parameters.Add(parameter);
                }
                i = cmd.ExecuteNonQuery();
            }
            catch
            {
                i = -1;
            }
            finally
            {
                this.closeCon();
            }
            return i;
        }

 

这段代码跳到catch模块去了 的值是负1  不知道什么错

小柑 | 园豆:6 (初学一级) | 2012-05-27 12:24

@小柑: 把 catch { i = -1; } 去掉,这样就可以看到具体的错误信息了。

dudu | 园豆:30994 (高人七级) | 2012-05-27 13:03

@小柑: 看到-1,说明有异常。此时,把异常信息打印出来。也可以跟踪后查看。如果你不用try-catch,应该抛出异常的。

具体的错误必须有你的异常信息才可以确定。

另外,最好你把你的存储过程的内容也贴出来才好分析。

无之无 | 园豆:5095 (大侠五级) | 2012-05-27 13:46

@笨笨蜗牛: SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PRO_AddOrder]
 @UserID varchar(20),
 @PayWay varchar(20),
 @SendWay varchar(20),
 @OrderTime DateTime,
 @TotelNumber int,
 @TotelPrice money,
 @OrderStatus varchar(20),
 @ReceiverName varchar(20),
 @ReceiverAddr varchar(20),
 @ReceiverPostcode varchar(20),
 @ReceiverPhone varchar(20) 
AS
BEGIN
 INSERT INTO [Order](UserID, PayWay, SendWay, OrderTime, TotelNumber,TotelPrice,
 OrderStatus,ReceiverName,ReceiverAddr,ReceiverPostcode,ReceiverPhone)
 VALUES (@UserID, @PayWay, @SendWay, @OrderTime, @TotelNumber,@TotelPrice,
 @OrderStatus,@ReceiverName,@ReceiverAddr,@ReceiverPostcode,@ReceiverPhone)
END

小柑 | 园豆:6 (初学一级) | 2012-05-27 15:24

@笨笨蜗牛: 

这是存储过程执行没有错

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PRO_AddOrder]
 @UserID varchar(20),
 @PayWay varchar(20),
 @SendWay varchar(20),
 @OrderTime DateTime,
 @TotelNumber int,
 @TotelPrice money,
 @OrderStatus varchar(20),
 @ReceiverName varchar(20),
 @ReceiverAddr varchar(20),
 @ReceiverPostcode varchar(20),
 @ReceiverPhone varchar(20) 
AS
BEGIN
 INSERT INTO [Order](UserID, PayWay, SendWay, OrderTime, TotelNumber,TotelPrice,
 OrderStatus,ReceiverName,ReceiverAddr,ReceiverPostcode,ReceiverPhone)
 VALUES (@UserID, @PayWay, @SendWay, @OrderTime, @TotelNumber,@TotelPrice,
 @OrderStatus,@ReceiverName,@ReceiverAddr,@ReceiverPostcode,@ReceiverPhone)
END

小柑 | 园豆:6 (初学一级) | 2012-05-27 15:25

很明显啊!表中OrderID的字段数据你为空的,里面要求你必填的嘛!都提示得很清楚了!

| 园豆:2 (初学一级) | 2012-05-27 15:37

@笨笨蜗牛: 

你好!不能将值 NULL 插入列 'OrderID',表 'Shopping.dbo.Order';列不允许有 Null 值。INSERT 失败。
语句已终止。 这个错怎么改啊,为什么OrderID 主键 不是自动生成的吗?

小柑 | 园豆:6 (初学一级) | 2012-05-27 16:04

我没插这个字段啊  不是可以自动生成的吗?怎么使它自动生成啊?

小柑 | 园豆:6 (初学一级) | 2012-05-27 16:06

@小柑: 你的表定义里orderid这个字段吧?这个字段的值要求不能为空吧?错误就在这里。

如果你的orderid可以是流水的,你把orderid修改为自增字段,就可以简单解决。

无之无 | 园豆:5095 (大侠五级) | 2012-05-27 17:44

@小柑: 你在数据库设计该字段的时候并没有将其设置为Identity.

俺不是肥熊猫 | 园豆:18 (初学一级) | 2012-05-27 18:42

@笨笨蜗牛: 哦   明白了  非常感谢啊 

小柑 | 园豆:6 (初学一级) | 2012-05-27 18:50
其他回答(1)
0

跟踪下,看下提示什么错误!!

| 园豆:2 (初学一级) | 2012-05-27 14:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册