C# cmd.ExecuteNonQuery()问题

publicintRunSql(stringstrSql,IDataParameter[]parameters){intn=-1;objConn.Open();SqlCo... public int RunSql(string strSql, IDataParameter[] parameters)
{
int n = -1;
objConn.Open();
SqlCommand cmd = new SqlCommand(strSql, objConn);
try
{
foreach (SqlParameter parm in parameters)
{
cmd.Parameters.Add(parm);
}

n = (int)cmd.ExecuteNonQuery();
}
catch { }

return n;
}
跟踪strSql为"Select * from [Users] where [password]=@Password and user_id=@UserID"。两个参数也都赋值,数据库连接也是正确的,可是执行ExecuteNonQuery方法之后,n值还是为-1。到SQL2005数据库查询有相应的password和user_id匹配的一条记录的。请问是哪里出了问题?
展开
 我来答
百度网友ef95fe793
2007-09-28 · 超过16用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:53.4万
展开全部
*********************在库里面执行***************
create proc SearchInfo
(
@UserID int,
@Password varchar(20)
)
as
begin
Select count(*) from [Users] where [password]=@Password and user_id=@UserID
end

**********************************************

呵呵,你为什么不在库里写一个存储过程呢?
然后在外面调用存储过程就简单多了
(执行效率高\安全性高)

**************C#里调用*********************
public int RunSql(string strSql, IDataParameter[] parameters)
{
int n = -1;
objConn.Open();
SqlCommand cmd = new SqlCommand(strSql, objConn);
cmd.commandtype = ....stored..;//这里很重要
try
{
foreach (SqlParameter parm in parameters)
{
cmd.Parameters.Add(parm);
}

n = (int)cmd.ExecuteNonQuery();
}
catch { }

return n;
}

**********************************************
通常写成这样较好
public class DataAccess
{
SqlConnection conn = null;
SqlCommand comm = null;
public DataAccess()
{
string str = ConfigurationManager.AppSettings["ConnectionString"].ToString();
conn = new SqlConnection(str);
}

/// <summary>
/// 打开连接
/// </summary>
public void Open()
{
if (conn.State != ConnectionState.Open || conn != null)
{
this.conn.Open();
}
}

/// <summary>
/// 关闭连接
/// </summary>
public void Close()
{
if (conn.State != ConnectionState.Closed)
{
this.conn.Close();
}
}

/// <summary>
/// 返回一个sqlcommand类型实例
/// </summary>
/// <param name="str"></param>
/// <param name="isProc"></param>
/// <param name="paralist"></param>
/// <returns></returns>
private SqlCommand command(string str,bool isProc,SqlParameter[] paralist)
{
comm = new SqlCommand();
comm.CommandText = str;
comm.Connection = conn;
if (isProc)
{
comm.CommandType = CommandType.StoredProcedure;
}
else
{
comm.CommandType = CommandType.Text;
}
if (paralist != null)
{
foreach (SqlParameter sp in paralist)
{
comm.Parameters.Add(sp);
}
}
return comm;
}

/// <summary>
/// 增删改
/// </summary>
/// <param name="str"></param>
/// <param name="isProc"></param>
/// <param name="paralist"></param>
/// <returns></returns>
public int QueryNonExcute(string str, bool isProc, SqlParameter[] paralist)
{
this.Open();
SqlCommand sqlcomm = command(str, isProc, paralist);
int nI = sqlcomm.ExecuteNonQuery();
this.Close();
return nI;
}

/// <summary>
/// 查询
/// </summary>
/// <param name="str"></param>
/// <param name="isProc"></param>
/// <param name="paralist"></param>
/// <returns></returns>
public DataSet QueryExcute(string str, bool isProc, SqlParameter[] paralist)
{
SqlCommand sqlcomm = command(str, isProc, paralist);
SqlDataAdapter sda = new SqlDataAdapter(sqlcomm);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
}

参考资料: 慢慢看吧,很灵活的

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
康秋芹史绫
2019-03-18 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.3万
采纳率:26%
帮助的人:888万
展开全部
ID
=
“txt_ID.Text”
是字符串,而你在数据库表中ID为长整形,类型不匹配无法删除相应表的字段。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
另世这01
2020-05-27 · TA获得超过3.7万个赞
知道小有建树答主
回答量:1.3万
采纳率:32%
帮助的人:737万
展开全部
txt_ID.Text
看看你数据库中
ID字段的类型如果是Int型。Txt_id.Text
就也必须int型的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ed4c02d
2007-09-28 · TA获得超过117个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:296万
展开全部
strSql应该是:"Select * from [Users] where [password]=? and user_id=?",用问号代替参数
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旋天渣观9129
2007-09-28 · TA获得超过1487个赞
知道大有可为答主
回答量:1443
采纳率:0%
帮助的人:1608万
展开全部
strSql = "Select count(*) from [Users] where [password]=@Password and user_id=@UserID";

int n = (int)cmd.ExecuteScalar();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式