比较来自世界各地的卖家的域名和 IT 服务价格

选择查询以获取数据 SQL Server

我正在尝试开始该请求 SQL Select 在其代码中 C#. 但我总是有办法 -1


int result = command.ExecuteNonQuery//;


但是,如果我使用,那么表格
delete

或者
insert

, 在职的...


ConnectString

也完美。

请检查下面的代码


SqlConnection conn = new SqlConnection/"Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password="/;
conn.Open//;

SqlCommand command = new SqlCommand/"Select id from [table1] where name=@zip", conn/;

//command.Parameters.AddWithValue/"@zip","india"/;
int result = command.ExecuteNonQuery//;

// result gives the -1 output.. but on insert its 1
using /SqlDataReader reader = command.ExecuteReader///
{
// iterate your results here
Console.WriteLine/String.Format/"{0}",reader["id"]//;
}

conn.Close//;


请求效果很好 SQL Server, 但我不明白为什么不仅有效 select query.

所有其他要求都有工作。
已邀请:

裸奔

赞同来自:

方法

SqlCommand.ExecuteNonQuery

您可以使用 ExecuteNonQuery 执行目录操作 /例如,查询数据库结构或创建数据库对象,如表/ 或者在不使用的情况下更改数据库中的数据 DataSet 通过执行指令 UPDATE, INSERT 或者 DELETE.
虽然 ExecuteNonQuery 不返回字符串,所有输出参数或与参数关联的返回值都填充了数据。
对于运营商 UPDATE, INSERT 和 DELETE 返回值是命令影响的行数。 当触发器存在于可插入或更新的表中时,返回值包括受插入或更新操作影响的行数以及受触发或触发影响的行数。 对于所有其他类型的操作员,返回值等于 -1. 如果发生回滚,则返回值也等于 -1.

方法 SqlCommand.ExecuteScalar

执行指令 Transact-SQL 要连接并返回受影响的率数。

所以没有。 来自运营商返回的运营商 SELECT, 您必须使用该方法 ExecuteScalar.

关联:
http://msdn.microsoft.com/en-u ... .aspx
所以尝试下面的代码:


SqlConnection conn = new SqlConnection/"Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password="/;
conn.Open//;

SqlCommand command = new SqlCommand/"Select id from [table1] where name=@zip", conn/;
command.Parameters.AddWithValue/"@zip","india"/;
// int result = command.ExecuteNonQuery//;
using /SqlDataReader reader = command.ExecuteReader///
{
if /reader.Read///
{
Console.WriteLine/String.Format/"{0}",reader["id"]//;
}
}

conn.Close//;

郭文康

赞同来自:

根据 MSDN

http://msdn.microsoft.com/ru-r ... .aspx
结果 -

这是受影响的兰特数量

, 由于您的请求相等
select

,

没有字符串将受到影响

/即插入,删除或更新/.

如果你想返回

一个术语

请求,使用
ExecuteScalar//

反而
ExecuteNonQuery//

:


int result = /int/ /command.ExecuteScalar///;


但是,如果您希望退回

很多行

,
ExecuteReader//

- 这是唯一的选项:


using /SqlDataReader reader = command.ExecuteReader/// {
while /reader.Read/// {
int result = reader.GetInt32/0/;

...
}
}

龙天

赞同来自:

您可以使用
ExecuteScalar//

反而
ExecuteNonQuery//

, 得到一个结果
, 使用它如下


Int32 result= /Int32/ command.ExecuteScalar//;
Console.WriteLine/String.Format/"{0}", result//;


它将请求并在请求返回的生成集中返回第一个字符串的第一列。 忽略附加列或行。

由于您希望只能获得一行返回,删除此使用。
SqlDataReader

来自您的代码


using /SqlDataReader reader = command.ExecuteReader///
{
// iterate your results here
Console.WriteLine/String.Format/"{0}",reader["id"]//;
}


因为他将再次执行您的团队,并会影响您页面的性能。

风见雨下

赞同来自:

也就是说,根据该计划。

http://msdn.microsoft.com/en-u ... .aspx
对于运营商 UPDATE, INSERT 和 DELETE 返回值是命令影响的行数。 当触发器存在于可插入或更新的表中时,返回值包括受插入或更新操作影响的行数以及受触发或触发影响的行数。 对于所有其他类型的操作员,返回值等于 -1. 如果发生回滚,则返回值也等于 -1.

二哥

赞同来自:

您还必须添加一个参数 @zip


SqlConnection conn = new SqlConnection/"Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password="/;
conn.Open//;
SqlCommand command = new SqlCommand/"Select id from [table1] where name=@zip", conn/;
//
// Add new SqlParameter to the command.
//
command.Parameters.AddWithValue/"@zip","india"/;
int result = /Int32/ /command.ExecuteScalar///;
using /SqlDataReader reader = command.ExecuteReader///
{
// iterate your results here
Console.WriteLine/String.Format/"{0}",reader["id"]//;

}
conn.Close//;

冰洋

赞同来自:

你必须使用
ExecuteScalar//

/返回第一列的第一个字符串/ 反而
ExecuteNonQuery//

/返回受影响的行数/.

有关更多信息,您应该联系
http://www.aspneto.com/ado-net ... .html
.

希望它会有所帮助!

要回复问题请先登录注册