2013-10-27 32 views
1

我已经创建了DataAccessLayer.cs文件,该文件可以帮助我与数据库建立连接,将记录插入到数据库中,并创建了存储过程。数据访问层

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data; 
using System.Data.SqlClient; 

public class DataAccessLayer 
{ 
    SqlConnection con = new SqlConnection("Connection String"); 
    SqlCommand cmd; 
public DataAccessLayer() 
{ 
    // 
    // TODO: Add constructor logic here 
    // 
} 

public int ExecuteProcedure(String procname, SqlParameter[]param) 
{ 
    cmd = new SqlCommand(); 
    cmd.CommandText = procname; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Connection = con; 

    foreach (SqlParameter obj in param) 
    { 
     cmd.Parameters.Add(obj); 
    } 
     con.Open(); 
     int i = cmd.ExecuteNonQuery(); 
     con.Close(); 
     return i; 
} 
} 

使用插入记录

ALTER proc [dbo].[AddContactInfo] 
(
@Name varchar(50), 
@DOB datetime, 
@Address Varchar(max), 
@Mobile varchar(15), 
@Email varchar(50), 
@CN int, 
@SN int, 
@CNN int, 
@Pincode int, 
@returnval int output 
) 
As 
Begin 
if exists(select Id from Contact_Info where [email protected]) 
begin 
set @returnval=-2; 
return @returnval; 
end 
else 
begin 
insert into   Contact_Info(Name,DOB,Address,CountryName,StateName,CityName,Pincode,Mobile,Email,CreatedOn ) 
values(@Name,@DOB,@Address,@CN,@SN,@CNN,@Pincode,@Mobile,@Email,GETDATE()) 

if @@ERROR<>0 
begin 
    set @returnval=-3; 
    return @returnval; 
end 
else 
begin 
    set @returnval=1; 
    return @returnval; 
end 
end 
End 
+0

但是我得到的错误是“程序或函数'AddContactInfo'期望参数'@returnval',它没有提供。” – user2924710

回答

2

但我得到的错误,这是“过程或函数'插入记录到数据库的存储过程

SqlParameter[] param = new SqlParameter[] 
    { 
     new SqlParameter("@Name",txtFirstName.Text), 
     new SqlParameter("@DOB",txtDOB.Text), 
     new SqlParameter("@Address",txtAddress.Text), 
     new SqlParameter("@CN",ddlCountry.SelectedValue), 
     new SqlParameter("@SN",ddlState.SelectedValue), 
     new SqlParameter("CNN",ddlCity.SelectedValue), 
     new SqlParameter("@Mobile",txtMobile.Text), 
     new SqlParameter("@Email",txtEmail.Text), 
     new SqlParameter("@Pincode",txtPincode.Text), 
     new SqlParameter("@returnval",SqlDbType.Int) 
    }; 
    int i = DAL.ExecuteProcedure("AddContactInfo", param); 
    if (i == 1) 
    { 
     lblError.Text = "Sucess"; 
    } 
    else 
    { 
     lblError.Text = "Not Sucess"; 
    } 

存储过程的代码AddContactInfo'期望参数'@returnval',它没有被提供。“

你必须设置你的new SqlParameter("@returnval", SqlDbType.Int)是一个output参数:

foreach (SqlParameter obj in param) 
{ 
    if (cmd.ParameterName == "@returnval") 
    { 
     cmd.Direction = ParameterDirection.Output 
    } 

    cmd.Parameters.Add(obj); 
} 

当然,这要求所有SP的具有相同@returnval在适当的时候。创建参数列表时最好设置它。