2013-10-27 82 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在適當的時候。創建參數列表時最好設置它。