我用的是VS2005和自带的sql2005我调用存储过程将一条记录写入数据库,VS下直接运行存储过程可以在数据库中永久插入记录,在程序运行时也调用相同的存储过程插入记录了可以显示出来,但关闭程序发现数据库中没有添加任何记录。
程序我是这么写的
        public bool InsertPriority(ref SqlConnection myConn,string newPriority)
        {
            SqlCommand cmd = new SqlCommand("InsertPriority", myConn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter p = new SqlParameter("@PriorityTitle", newPriority);
            cmd.Parameters.Add(p);
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch
            {
                return false;
            }
            return true;
        }请大家帮帮忙,这个问题困扰我好几天了

解决方案 »

  1.   

    ALTER PROCEDURE dbo.InsertPriority 
    (
    @PriorityTitle TEXT
    )
    AS
    insert into Priority
    (
    PriorityTitle
    )
    values
    (
    @PriorityTitle
    )
    RETURN
    存储过程这样写的
      

  2.   

    谢谢ls的回答,不过问题没有错在这里,我加入事务处理效果和原来一样
    修改后的存储过程如下
    ALTER PROCEDURE dbo.InsertPriority 
    (
    @PriorityTitle TEXT
    )
    AS
    begin TRAN
    insert into Priority
    (
    PriorityTitle
    )
    values
    (
    @PriorityTitle
    )
    COMMIT TRAN
    RETURN
      

  3.   

    感谢@km_yu(雪上吹风)
    我赋值了,不然也不会在程序中看到加的值。感谢jin_yong(DH的半月刀)
    这个好像和是否重新链接数据库没有关系。但就是程序中显示出来,数据库中没有添加记录我想应该是这些函数还有什么讲究,我不会用!
    也可能是写数据是写在dataset中了,没有存进数据库。但是我根本就没有用dataset啊。
    不知道怎么回事。多谢大家帮忙顶帖!
      

  4.   

    你在SqlParameter p = new SqlParameter("@PriorityTitle", newPriority);后面加上p.Direction = ParameterDirection.Input;试试。
      

  5.   

    SqlParameter param = new SqlParameter("@PriorityTitle", SqlDbType.VarChar, 20);
    param.Value = newPriority;
    p.Direction = ParameterDirection.Input;可能是LZ在实例化参数的时候没有指定参数大小 和类型
      

  6.   

    谢谢“友”也不是这个原因,
    我现在直接执行sql语句也不能把记录插入到数据库,但是执行完sql命令后返回值为1意味着插入数据了,影响一行!
      

  7.   

    返回值是true还是false?如果返回false,把捕捉错误的那块改写一下,看看到底是什么错。
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
        return false;
    }    
      

  8.   

    public bool InsertPriority(ref SqlConnection myConn,string newPriority)
            {
                SqlCommand cmd = new SqlCommand("InsertPriority", myConn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter p = new SqlParameter("@PriorityTitle", newPriority);
                cmd.Parameters.Add(p);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch
                {
                    return false;
                }
                return true;
            }
    --------------------------你这样可以是没有执行cmd.ExecuteNonQuery();试下
            public bool InsertPriority(ref SqlConnection myConn,string newPriority)
            {            try
                {
                SqlCommand cmd = new SqlCommand("InsertPriority", myConn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter p = new SqlParameter("@PriorityTitle", newPriority);
                cmd.Parameters.Add(p);                cmd.ExecuteNonQuery();
                }
                catch
                {
                    return false;
                }
                return true;
            }
      

  9.   

    谢谢大家帮忙!小弟还是没有解决问题
    ki1381
    没有报错。wsd2616412
    有返回值1,说明影响数据库一行。所以这句执行到了。
            static void Main(string[] args)
            {
                string constring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dbuser.mdf;Integrated Security=True;User Instance=True";
                SqlConnection conn = new SqlConnection(constring);
                string test = "insert into [user] (name) values(" + "'OK'" + ")";
                conn.Open();
                SqlCommand cmd = new SqlCommand(test, conn);
                int i=cmd.ExecuteNonQuery();
                Console.WriteLine(i.ToString());
                conn.Close();
            }
        }
    我新建一个项目又写了一段程序试试,程序如上。表名为user,
    我只想插入数据库一条记录都不能实现,但是返回值i是1,
    说明应该插入数据库了,可是关掉程序后,在VS2005中看还是没有加入记录。
    不知道怎么回事??