2013-04-28 25 views
1

朋友,我想提出的,我已经在SQL服务器2008年创建存储过程的Windows窗体应用程序,然后在窗口中创建一个外部类形成这样如何提供参数到存储过程

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Jain_milan.Common 
{ 
    public class Personal 
    { 
     string name, fathername, mothername, familyhead, dateofbirth,educationlvl, education, blood, gotra, panth, marrital; 

     public string Educationlvl 
     { 
      get { return educationlvl; } 
      set { educationlvl = value; } 
     } 

     public string Panth 
     { 
      get { return panth; } 
      set { panth = value; } 
     } 

     public string Gotra 
     { 
      get { return gotra; } 
      set { gotra = value; } 
     } 

     public string Blood 
     { 
      get { return blood; } 
      set { blood = value; } 
     } 

     public string Education 
     { 
      get { return education; } 
      set { education = value; } 
     } 

     public string DateOfBirth 
     { 
      get { return dateofbirth; } 
      set { dateofbirth = value; } 
     } 

     public string FamilyHead 
     { 
      get { return familyhead; } 
      set { familyhead = value; } 
     } 

     public string MotherName 
     { 
      get { return mothername; } 
      set { mothername = value; } 
     } 

     public string FatherName 
     { 
      get { return fathername; } 
      set { fathername = value; } 
     } 

     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     public string Marrital 
     { 
      get { return marrital; } 
      set { marrital = value; } 
     } 

    } 

} 

在那里我已经创建获取设置功能适用于所有的paramerets 在另一个外部类我定义所有的存储过程,这样

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Jain_milan.DataAction 
{ 
    public enum InsertStoredProcedure 
    { 
     insertpersonal, 
     insertressicontact, 
     insertoccupcontact, 
     insertspouse, 
     insert1children, 
     insert2children, 
     insert3children, 
     insert4children, 
     insert5children 
    } 
} 

之后将其插入到我再次创造了一个seprate类数据库,并通过类似的参数这

public class InsertAction 
    { 
     public bool Insertpersonal(Personal per) 
     { 
       SqlCommand cmd = Database.GetConnection().CreateCommand(); 
       cmd.CommandText=InsertStoredProcedure.insertpersonal.ToString(); 
       cmd.CommandType= CommandType.StoredProcedure; 
       cmd.Parameters.Add(new SqlParameter("@Name",per.Name)); 
       cmd.Parameters.Add(new SqlParameter("@FatherName",per.FatherName)); 
       cmd.Parameters.Add(new SqlParameter("@MotherName",per.MotherName)); 
       cmd.Parameters.Add(new SqlParameter("@FamilyHead",per.FamilyHead)); 
       cmd.Parameters.Add(new SqlParameter("@DateOfBirth",per.DateOfBirth)); 
       cmd.Parameters.Add(new SqlParameter("@EducationLevel", per.Educationlvl)); 
       cmd.Parameters.Add(new SqlParameter("@Education",per.Education)); 
       cmd.Parameters.Add(new SqlParameter("@Blood",per.Blood)); 
       cmd.Parameters.Add(new SqlParameter("@Gotra",per.Gotra)); 
       cmd.Parameters.Add(new SqlParameter("@Panth",per.Panth)); 
       cmd.Parameters.Add(new SqlParameter("@Marrital",per.Marrital)); 
       bool ans = cmd.ExecuteNonQuery() > 0; 
       cmd.Dispose(); 
       Database.CloseConnection(); 
       return ans; 
      }} 

然后提交按钮我已经做了提交动作编码....

private void submit_addbtn_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       //personal data insert 
       Personal per = new Personal(); 
       per.Name = nametxt.Text; 
       per.FatherName = f_nametxt.Text; 
       per.MotherName = m_nametxt.Text; 
       per.Gotra = gotra_txt.Text; 
       per.Panth = panthcb.Text; 
       per.FamilyHead = fhntext.Text; 
       per.Educationlvl = edulvlcb.Text; 
       per.Education = educb.Text; 
       per.Blood = bloodcb.Text; 
       per.Marrital = MarritalStatus; 
       per.DateOfBirth = (day + '/' + month + '/' + year).ToString(); 
       if (new InsertAction().Insertpersonal(per)) 
       { 
        MessageBox.Show("Personal Insertion Happen "); 
       } 
       else 
       { 
        MessageBox.Show(" Personal Insertion does not Happen "); 
       } 
}} 

在运行它显示错误的程序

过程或函数“ insertpersonal'期望参数'@educationlvl'未提供

Bu我已经提供了像所有其他参数然后最新问题发生..... 请解决这一点。请请请

回答

3

看起来像一个命名问题。尝试改变:

cmd.Parameters.Add(new SqlParameter("@EducationLevel", per.Educationlvl)); 

cmd.Parameters.Add(new SqlParameter("@EducationLvl", per.Educationlvl)); 

编辑,为Marrital问题:

尝试改变:

cmd.Parameters.Add(new SqlParameter("@Marrital",per.Marrital)); 

cmd.Parameters.Add(new SqlParameter("@Marrital", per.Marrital ?? DBNull.Value)); 

数据库的等效C#nullDBNull.Value。您不能将C#null传递到数据库,它不喜欢它。所以,你要做的是检查你想要发送的值是否为null。如果是,请发送DBNull.Value。这就是per.Marrital ?? DBNull.Value。这是一样的这样做,但在更短的语法:

object marritalValue = per.Marrital; 
if(marritalValue == null) 
    marritalValue = DBNull.Value 
cmd.Parameters.Add(new SqlParameter("@Marrital", marritalValue)); 

http://msdn.microsoft.com/en-us/library/ms173224.aspx

+0

嘿,现在它给同样的味精marrital – user2327043 2013-04-28 03:04:36

+0

它的名字是一样的..所以命名问题 – user2327043 2013-04-28 03:05:26

+0

检查你的存储过程 - 它在寻找什么?我猜想它正在寻找“婚姻”(一个r)(它告诉你的确切错误是什么?)。 – Gjeltema 2013-04-28 03:06:13

1

的参数必须具有相同的名称@educationlvl是不一样的@EducationLevel。希望这可以帮助。