今天碰到一个这样纳闷的情况
我有一个插入(insert into)的存储过程,在服务器上面无法把数据插入到数据表里,程序也不报错,直接提示插入成功(查了一下数据库,才知道数据根本没插入进来);但在本机测试可以成功插入到数据库
为什么解决这个问题,我测试不用存储过程,在服务器上面通过了测试,程序写进了数据库.
但存储过程就写不进来,我想问的是:这个问题是程序本身的原因,还是服务器设置的原因!
服务器是(win2003)本机(WINXP)

解决方案 »

  1.   

    //存储过程代码
    ALTER    Procedure EmailsAdd
    (
    @FromUser nvarchar(50),
    @UserName nvarchar(50),
    @Title nvarchar(50),
    @Body varchar(6000),
    @Status bit,
    @CreatDate datetime,
    @EmailID int OUTPUT
    )
    ASINSERT INTO Emails
    (
    FromUser,
    UserName,
    Title,
    Body,
    Status,
    CreatDate
    )
    VALUES
    (
    @FromUser,
    @UserName,
    @Title,
    @Body,
    @Status,
    @CreatDate
    )SELECT
    @EmailID = @@Identity//调用代码
     public int Insert(string fromUser, string userName, string title, string body, bool status, DateTime creatDate)
    {
    // Create Instance of Connection and Command Object
                SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
                SqlCommand myCommand = new SqlCommand("EmailsAdd", myConnection); // Mark the Command as a SPROC
                myCommand.CommandType = CommandType.StoredProcedure; #region Add Parameters to SPROC
    SqlParameter parameterFromUser = new SqlParameter("@FromUser", SqlDbType.NVarChar, 50);
                parameterFromUser.Value = fromUser;
                myCommand.Parameters.Add(parameterFromUser);
    SqlParameter parameterUserName = new SqlParameter("@UserName", SqlDbType.NVarChar, 50);
                parameterUserName.Value = userName;
                myCommand.Parameters.Add(parameterUserName); SqlParameter parameterTitle = new SqlParameter("@Title", SqlDbType.NVarChar, 50);
                parameterTitle.Value = title;
                myCommand.Parameters.Add(parameterTitle); SqlParameter parameterBody = new SqlParameter("@Body", SqlDbType.NVarChar, 6000);
                parameterBody.Value = body;
                myCommand.Parameters.Add(parameterBody); SqlParameter parameterStatus = new SqlParameter("@Status", SqlDbType.Bit, 1);
                parameterStatus.Value = status;
                myCommand.Parameters.Add(parameterStatus); SqlParameter parameterCreatDate = new SqlParameter("@CreatDate", SqlDbType.DateTime, 8);
                parameterCreatDate.Value = creatDate;
                myCommand.Parameters.Add(parameterCreatDate); SqlParameter parameterEmailID = new SqlParameter("@EmailID", SqlDbType.Int, 4);
                parameterEmailID.Direction = ParameterDirection.Output;
                myCommand.Parameters.Add(parameterEmailID); #endregion // Execute the command
                int Id=0;
    try
    {
                    myConnection.Open();
                    myCommand.ExecuteNonQuery();                Id = (int)parameterEmailID.Value;
    }
                catch
    {
                   Id=0;
                }
                finally
                {
        myConnection.Close();
                }
                return Id;
       
    }
      

  2.   

    sql server?
    用其的profiler来查看一下,看看你的存储是否进行,如果没有进行的话
      

  3.   

    如果没有执行,修改你的存储如下:ALTER Procedure EmailsAdd
    (
    @FromUser nvarchar(50),
    @UserName nvarchar(50),
    @Title nvarchar(50),
    @Body varchar(6000),
    @Status bit,
    @CreatDate datetime,
    @EmailID int OUTPUT
    )
    ASINSERT INTO Emails
    (
    FromUser,
    UserName,
    Title,
    Body,
    Status,
    CreatDate
    )
    VALUES
    (
    @FromUser,
    @UserName,
    @Title,
    @Body,
    @Status,
    @CreatDate
    )SELECT
    @EmailID = @@Identity
    GO  --submit your operation--
      

  4.   

    你把as后的代码包含在
    Begin tran
    commit里面试一下
      

  5.   

    现在查询分析器插条记录看能否成功
    如成功可能使你的主程序出问题
    问句,主程序是用Java写的吗?