存储过程:CREATE PROCEDURE dbo.ra_re
@MemberName varchar(50),
@MemberPwd varchar(50),
@MemberRealName varchar(50)
AS
insert into ra_Member(MemberName,MemberPwd,MemberRealName) values (@MemberName,@MemberPwd,@MemberRealName)
GO
model层:namespace Model
{
public class ra_Member
{
private int _memberId;
private string _memberName ;
private string _memberPwd ;
private string _memberRealName;
/// <summary>
/// 用户ID(自增长)
/// </summary>
public int MemberId
{
set {this._memberId = value; }
get { return this._memberId; }
}
/// <summary>
/// 用户名
/// </summary>
public string MemberName
{
set { this._memberName = value; }
get { return this._memberName; }
}
/// <summary>
/// 用户密码
/// </summary>
public string MemberPwd
{
set { this._memberPwd = value; }
get { return this._memberPwd; }
}
/// <summary>
/// 用户真实姓名
/// </summary>
public string MemberRealName
{
set { this._memberRealName = value; }
get { return this._memberRealName; }
}
}
}
SQLOperate层:
namespace SQLDAL
{
public class SQLOperate
{
//数据库连接
public static readonly string CONN_STRING = ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection con = new SqlConnection(CONN_STRING);
#region 检测连接是否打开
/// <summary>
/// 检测连接的方法CheckConnection(),若连接是关闭的则打开SqlConnection连接
/// </summary>
public void CheckConnection()
{
if (this.con.State == ConnectionState.Closed)
{
this.con.Open();
}
}
#endregion/// <summary>
///
/// </summary>
/// <param name="conn"></param>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
public bool ExecuteNonQuery(bool IsPro, string strSQL)
{
CheckConnection();
try
{
SqlCommand com = new SqlCommand(strSQL, con);
if (IsPro)
{
com.CommandType = CommandType.StoredProcedure;
}
else
{
com.CommandType = CommandType.Text;
}
com.CommandText = strSQL;
com.ExecuteNonQuery();
con.Close();
return true;
}
catch
{
return false;
}
}
}
}IDAL层:namespace IDAL
{
public class IRegister
{
SQLDAL.SQLOperate db = new SQLDAL.SQLOperate();
public bool IDA_AddRegister(Model.ra_Member register)
{
return db.ExecuteNonQuery(true,"ra_re"); //ra_re存储过程名称
}
}
}
BLL层:namespace BLL
{
public class BllRegister
{
IDAL.IRegister DAL_register = new IDAL.IRegister();
public bool AddRegister(Model.ra_Member m_register)
{
return DAL_register.IDA_AddRegister(m_register);
}
}
}WEB层:public partial class user_Re : System.Web.UI.Page
{
BLL.BllRegister B_register = new BLL.BllRegister();
Model.ra_Member M_register = new Model.ra_Member();
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
SqlParameter[] parms =
{
new SqlParameter("@MemberName", M_register.MemberName),
new SqlParameter("@MemberPwd", M_register.MemberPwd),
new SqlParameter("@MemberRealName", M_register.MemberRealName)
};
M_register.MemberName = this.txtName.Text;
M_register.MemberPwd = this.txtPwd.Text;
M_register.MemberRealName = this.txtRealName.Text;
if (B_register.AddRegister(M_register))
{
Response.Write("<script language=javascript>alert('数据库添加成功!');</script>");
}
else
{
Response.Write("<script language=javascript>alert('数据库操作有错误!');</script>");
}
}
}这样一层一层的调用.
调试的时候catch提示错误: 过程或函数 'ra_re' 需要参数 '@MemberName',但未提供该参数。
把存储过程'ra_re'中的参数附上默认值,程序是能通过的..我想存储过程'ra_re'写的应该是正确的.
我觉得应该是WEB层中错误.不过不知道怎么写.希望知道的大大帮我看看啊? 谢谢了!!! 100分送上
@MemberName varchar(50),
@MemberPwd varchar(50),
@MemberRealName varchar(50)
AS
insert into ra_Member(MemberName,MemberPwd,MemberRealName) values (@MemberName,@MemberPwd,@MemberRealName)
GO
model层:namespace Model
{
public class ra_Member
{
private int _memberId;
private string _memberName ;
private string _memberPwd ;
private string _memberRealName;
/// <summary>
/// 用户ID(自增长)
/// </summary>
public int MemberId
{
set {this._memberId = value; }
get { return this._memberId; }
}
/// <summary>
/// 用户名
/// </summary>
public string MemberName
{
set { this._memberName = value; }
get { return this._memberName; }
}
/// <summary>
/// 用户密码
/// </summary>
public string MemberPwd
{
set { this._memberPwd = value; }
get { return this._memberPwd; }
}
/// <summary>
/// 用户真实姓名
/// </summary>
public string MemberRealName
{
set { this._memberRealName = value; }
get { return this._memberRealName; }
}
}
}
SQLOperate层:
namespace SQLDAL
{
public class SQLOperate
{
//数据库连接
public static readonly string CONN_STRING = ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection con = new SqlConnection(CONN_STRING);
#region 检测连接是否打开
/// <summary>
/// 检测连接的方法CheckConnection(),若连接是关闭的则打开SqlConnection连接
/// </summary>
public void CheckConnection()
{
if (this.con.State == ConnectionState.Closed)
{
this.con.Open();
}
}
#endregion/// <summary>
///
/// </summary>
/// <param name="conn"></param>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
public bool ExecuteNonQuery(bool IsPro, string strSQL)
{
CheckConnection();
try
{
SqlCommand com = new SqlCommand(strSQL, con);
if (IsPro)
{
com.CommandType = CommandType.StoredProcedure;
}
else
{
com.CommandType = CommandType.Text;
}
com.CommandText = strSQL;
com.ExecuteNonQuery();
con.Close();
return true;
}
catch
{
return false;
}
}
}
}IDAL层:namespace IDAL
{
public class IRegister
{
SQLDAL.SQLOperate db = new SQLDAL.SQLOperate();
public bool IDA_AddRegister(Model.ra_Member register)
{
return db.ExecuteNonQuery(true,"ra_re"); //ra_re存储过程名称
}
}
}
BLL层:namespace BLL
{
public class BllRegister
{
IDAL.IRegister DAL_register = new IDAL.IRegister();
public bool AddRegister(Model.ra_Member m_register)
{
return DAL_register.IDA_AddRegister(m_register);
}
}
}WEB层:public partial class user_Re : System.Web.UI.Page
{
BLL.BllRegister B_register = new BLL.BllRegister();
Model.ra_Member M_register = new Model.ra_Member();
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
SqlParameter[] parms =
{
new SqlParameter("@MemberName", M_register.MemberName),
new SqlParameter("@MemberPwd", M_register.MemberPwd),
new SqlParameter("@MemberRealName", M_register.MemberRealName)
};
M_register.MemberName = this.txtName.Text;
M_register.MemberPwd = this.txtPwd.Text;
M_register.MemberRealName = this.txtRealName.Text;
if (B_register.AddRegister(M_register))
{
Response.Write("<script language=javascript>alert('数据库添加成功!');</script>");
}
else
{
Response.Write("<script language=javascript>alert('数据库操作有错误!');</script>");
}
}
}这样一层一层的调用.
调试的时候catch提示错误: 过程或函数 'ra_re' 需要参数 '@MemberName',但未提供该参数。
把存储过程'ra_re'中的参数附上默认值,程序是能通过的..我想存储过程'ra_re'写的应该是正确的.
我觉得应该是WEB层中错误.不过不知道怎么写.希望知道的大大帮我看看啊? 谢谢了!!! 100分送上
解决方案 »
- C# 读取USB条码扫描枪数据
- 有用FastReport报表的吗?FastReport3.2中如何给报表中的变量传值?
- C# 委托处理状态栏的现实
- 疑惑:关于c#嵌套类的理解
- 用AxSHDocVw.AxWebBrowser修改的Excel文档如何自动保存?
- 不通过数据库,怎样得到当前有多少个session?(多少人连在线上)
- 求Pop3协议的详细说明,急用
- Entity Framwork 使用FirstOrDefault方法报错!
- C# Panel全屏后,任务栏部分不能全部占满
- 分不够可再加!!一个问题相信大家也有过的,关于DATAGRID,详情请看
- Crystal Reports for Visual Studio 2005 好用吗
- 写ashx程序遇到的Session的问题,急!
string demoXml, string connectionString)
{
// Update the demographics for a store, which is stored
// in an xml column.
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;"; using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID; // Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml); try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
///
/// </summary>
/// <param name="conn"> </param>
/// <param name="cmdType"> </param>
/// <param name="cmdText"> </param>
/// <param name="cmdParms"> </param>
/// <returns> </returns>
public bool ExecuteNonQuery(bool IsPro, string strSQL)
{
CheckConnection();
try
{
SqlCommand com = new SqlCommand(strSQL, con);
if (IsPro)
{
com.CommandType = CommandType.StoredProcedure;
}
else
{
com.CommandType = CommandType.Text;
}
com.CommandText = strSQL;
com.ExecuteNonQuery();
con.Close();
return true;
}
catch
{
return false;
}
}
}
}
你执行SQL的时候根本没有给要执行的SQL提供参数
做法可以参考如下代码public bool ExecuteSql(bool isPro,string strSql,SqlParameter[] params)
{
CheckConnection();
try
{
SqlCommand com = new SqlCommand(strSQL, con);
if(params !=null){com.Parameters.addArray(params);}
if (IsPro)
{
com.CommandType = CommandType.StoredProcedure;
}
else
{
com.CommandType = CommandType.Text;
}
com.CommandText = strSQL;
com.ExecuteNonQuery();
con.Close();
return true;
}
catch
{
return false;
}
}
public static void ExecPrc(string MemberName, string MemberPwd)
{
SqlCommand cmd = new SqlCommand("存储过程名称", cn);
cmd.CommandType = CommandType.StoredProcedure; SqlParameter str1 = cmd.Parameters.Add("@MemberName", SqlDbType.VarChar, 50);
str1.Direction = ParameterDirection.Input; SqlParameter str2 = cmd.Parameters.Add("@MemberPwd", SqlDbType.VarChar, 50);
str2.Direction = ParameterDirection.Input;
str1.Value = MemberName;
str2.Value = MemberPwd; cmd.ExecuteNonQuery();
}
上面代码是我随便改的,你参考着做
/// </summary>
/// <param name="conn"> </param>
/// <param name="cmdType"> </param>
/// <param name="cmdText"> </param>
/// <param name="cmdParms"> </param>
/// <returns> </returns>
public bool ExecuteNonQuery(bool IsPro, string strSQL)
{
CheckConnection();
try
{
SqlCommand com = new SqlCommand(strSQL, con);
if (IsPro)
{
com.CommandType = CommandType.StoredProcedure;
}
else
{
com.CommandType = CommandType.Text;
}
com.CommandText = strSQL;
com.ExecuteNonQuery();
con.Close();
return true;
}
catch
{
return false;
}
} 其实 xml 注释 就能看出来的/// <param name="conn"> </param>
/// <param name="cmdType"> </param>
/// <param name="cmdText"> </param>
/// <param name="cmdParms"> </param><param name="cmdParms"> </param>,在你调用存储过程的时候 你需要传递存储过程的参数可你的方法却没有这个步骤,所以在你没有为存储过程的参数指定默认值时 就会报错了相关代码 可以参考 sqlhelper
CREATE PROCEDURE dbo.ra_re
@MemberName varchar(50),--建议用nvarchar 更好支持中文
@MemberPwd varchar(50),
@MemberRealName varchar(50)
AS
insert into ra_Member(MemberName,MemberPwd,MemberRealName) values (@MemberName,@MemberPwd,@MemberRealName)
GO
错误显示是参数有问题,打印出参数的值 比较容易查出问题。BL 方法 建议加 STATIC