GVKun编程网logo

c# – 内部循环中的ExecuteNonQuery(c#循环结构)

16

在本文中,我们将带你了解c#–内部循环中的ExecuteNonQuery在这篇文章中,我们将为您详细介绍c#–内部循环中的ExecuteNonQuery的方方面面,并解答c#循环结构常见的疑惑,同时我

在本文中,我们将带你了解c# – 内部循环中的ExecuteNonQuery在这篇文章中,我们将为您详细介绍c# – 内部循环中的ExecuteNonQuery的方方面面,并解答c#循环结构常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar、asp.net EXECUTENONQUERY()返回值介绍、c# ExecuteScalar和ExecuteNonQuery、C# SQL ExecuteNonQuery 在查询完成之前返回控制权

本文目录一览:

c# – 内部循环中的ExecuteNonQuery(c#循环结构)

c# – 内部循环中的ExecuteNonQuery(c#循环结构)

我正在尝试在C#中的循环中插入数据库记录.

它在我硬编码这样的值时起作用:

string query3 = "INSERT INTO furniture (room_id,member_id) VALUES (222,333);";
    sqlCommand cmd3 = new sqlCommand(query3,sqlConnection3);
    sqlConnection3.open();

    for (int i = 0; i < arrItemsPlanner.Length; i++)
    {
        try
            {
                cmd3.ExecuteNonQuery();
            }
            catch
            {
                return "Error: Item Could not be saved";
            }
            finally
            {
                //Fail
            }
        }

但是,当我使用参数化查询时,它不起作用 – 即使我将值硬编码到参数化查询中,如下所示:

string query3 = "INSERT INTO furniture (room_id,member_id) VALUES (@room_id,sqlConnection3);
    sqlConnection3.open();

    for (int i = 0; i < arrItemsPlanner.Length; i++)
    {
        try
            {
                cmd3.Parameters.Add("@room_id",System.Data.sqlDbType.Int);
                cmd3.Parameters["@room_id"].Value = 222;
                cmd3.ExecuteNonQuery();
            }
            catch
            {
                return "Error: Item Could not be saved";
            }
            finally
            {
                //Fail
            }
        }

有人能看到我在哪里错了吗?

非常感谢!

解决方法

看起来你一遍又一遍地添加命令的参数集合.每次迭代都清除它.

我还建议抛出实际的异常,这样你就可以看到问题所在.

ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar

ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar

ADO.Net基础
程序要和数据交互要通过ADO.Net进行,通过ADO.Net就能在程序中执行

sql了。 ADO.Net中提供了对各种不同数据的统一操作接口。
直接在项目中内嵌mdf文件的方式使用sqlServer数据库(基于服务的数据

库)。 mdf文件随着项目走,用起来方便,和在数据库服务上创建数据库

没什么区别,运行的时候会自动附加(Attach)。
双击mdf文件会在“服务器资源管理器”中打开,管理方式和在

Management Studio没有什么本质不同。要拷贝mdf文件需要关闭所有指向

mdf文件的连接。
正式生产运行的时候到附加sqlServer上、修改连接字符串即可,除此之

外没有任何的区别,在“数据库”节点上点右键“附加”;在数据库节点

上任务分离就可以得到可以拷来拷去mdf文件。
用的时候要在控制台、WinForm项目中在Main函数最开始的位置加入备注

中的代码。ASP.Net项目中不需要。

连接sqlServer
连接字符串:程序通过连接字符串指定要连哪台服务器上的、哪个实例的

哪个数据库、用什么用户名密码等。
项目内嵌mdf文件形式的连接字符串“Data Source=.

\sqlEXPRESS;AttachDBFilename=|DataDirectory|

\Database1.mdf;Integrated Security=True;User Instance=True”。
     “.\sqlEXPRESS”表示“本机上的sqlEXPRESS实例”,如果数据库

实例名不是sqlEXPRESS,则需要修改。” Database1.md“f为mdf的文件

名。
ADO.Net中通过sqlConnection类创建到sqlServer的连接,

sqlConnection代表一个数据库连接, ADO.Net中的连接等资源都实现了

Idisposable接口,可以使用using进行资源管理,执行备注中的代码如果

成功了就 ok。


可能遇到的错误
1、由于 启动用户实例的进程时出错,导致无法生成sqlServe的用户实例


http://wenwen.soso.com/z/q15616823.htm
2、版本太低,只支持2005及以下数据库。解决:安装VisualStudio 2008

SP1.
3、启动超时。多试几次

执行简单的Insert语句
sqlCommand表示向服务器 提交的命令(sql语句等)CommandText属性为

要执行的sql语句,Execute NonQuery方法执行一个非查询语句(Update

、Insert、Delete等)
  Using(sqlCommand cmd=conn.CreateCommand())
 {
   cmd.CommandText=“Insert into T_Users(UserName.Password)

values (’admin’,’888888’)”;
   cmd ExecuteNonQuery();
}
ExecuteNonquery返回值是执行的影响行数
常犯错:
string username=‘test’;
…….
cmd.CommandText=“Insert into T_Users(UserName.Password) values

(’username’,’888888’)”;

ExecuteNoQuery()
sqlCommand表示向服务器 提交的命令(sql语句等)CommandText属性为

要执行的sql语句,Execute NonQuery方法执行一个非查询语句(Update

、Insert、Delete等)
  Using(sqlCommand cmd=conn.CreateCommand())
 {
   cmd.CommandText=“Insert into T_Users(UserName.Password)

values (’admin’,’888888’)”;

ExecuteScalar
sqlCommand 的一个方法,用于执行查询,返回查询中返回的结果 集中的

第一行 第一列 。
1)
Output inserted.id
执行有多行结果集的用ExecuteReader();
sqlDataReader
Cmd.executeNoQuery()
Cmd.executeReader()
sqlDataReader reader=cmd.ExecuteReader();
While(reader.Read())
{
Console.writeline(reader.GetString(1));
}
Reader 有方法 GetString,GetInt32等方法,他的参数都是整数,序号

。Getordinal方法,根据列名动态得到序号。
执行有多行结果集的用ExecuteReader();
Reader 有方法 GetString,GetInt32等方法,他的参数都是整数,序号

。Getordinal方法,根据列名动态得到序号。

string source = @"Data Source=.\sqlEXPRESS;AttachDBFilename=|

DataDirectory|\Database1.mdf;Integrated Security=True;User

Instance=True";
            using(sqlConnection conn=new sqlConnection(source) )
            {
                conn.open();

                using (sqlCommand com = conn.CreateCommand())
                {
                   /* com.CommandText = "Insert into T_User

(name,age,nikaname)values('YOYO',20,'PPP')";
                    com.ExecuteNonQuery();
                    Console.WriteLine("插入成功!");
                    */

                    com.CommandText = "select * from T_user";
                    sqlDataReader reader = com.ExecuteReader();
                    while (reader.Read())
                       {
                        string username = reader.GetString

(reader.Getordinal("name"));
                        int age = reader.GetInt32

(reader.Getordinal("age"));
                        Console.WriteLine("Uname={0},Uage=

{1}",username,age);                         }               }            }          Console.WriteLine("打开了!");          Console.ReadKey();         }

asp.net EXECUTENONQUERY()返回值介绍

asp.net EXECUTENONQUERY()返回值介绍

     ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete  语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,所以执行这种操作时最好用try--catch--语句来容错。

  例如用ExecuteNonQuery()方法执行create操作

  
[code]
    SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=PSDB;Integrated Security=SSPI");

   string str = "CREATE TABLE aaa ( " +
  "[ID] [int] IDENTITY (1, 1) NOT NULL , " +
  "[BasicID] [int] NULL ," +
  "[AdoptedName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," +
  "[AdoptedSex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ," +
  "[AdoptBirthday] [smalldatetime] NULL ," +
  "[AdoptedType] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ," +
  "[ApprTime] [smalldatetime] NULL ," +
  "[Remark] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL " +
") ON [PRIMARY]   ";    

  SqlCommand comm = new SqlCommand(str, conn);
        int i = 10;
        try
        {
            conn.Open();
            i = comm.ExecuteNonQuery();
            conn.Close();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

        Response.Write(i.ToString());
[code]
       如果执行成功的话 返回的值为-1,如果数据表已经存在的话返回异常:数据库中已存在名为 ''aaa'' 的对象。

您可能感兴趣的文章:
  • asp.net弹出窗口 返回值
  • ASP.NET 获取存储过程返回值的实现代码
  • asp.net中将js的返回值赋给asp.net控件的小例子
  • asp.net实现调用存储过程并带返回值的方法
  • ASP.NET Core Mvc中空返回值的处理方法详解

c# ExecuteScalar和ExecuteNonQuery

c# ExecuteScalar和ExecuteNonQuery

今天写代码时,遇到一个问题,解决之后,然后想记录一下,于是就申请开通博客,本人是菜鸟,问题可能比较简单

 

using (SqlConnection con = getConnect())
            {
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }
                    
                    result = (int)cmd.ExecuteScalar();
                }
            }
using (SqlConnection con = getConnect())
            {
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }
                  
                    result = cmd.ExecuteNonQuery();
                }
            }

就是在查询一个 select count(id) from UrgentOrder where orgid='''' ,获取集合数的时候,第一次使用了 

ExecuteNonQuery   ,然后怎么查返回都是-1(result初始值-1),我还以为sql写的问题,放入数据库中查询是正确的,然后我就纳闷了,,去翻一下资料了,
发现这个是返回受影响的数值,增加,更新,删除的情况。
ExecuteScalar  而这个是执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。


20191109记
 

C# SQL ExecuteNonQuery 在查询完成之前返回控制权

C# SQL ExecuteNonQuery 在查询完成之前返回控制权

如何解决C# SQL ExecuteNonQuery 在查询完成之前返回控制权?

我正在使用 C# 控制台应用程序每晚恢复数据库。我让 C# 应用程序调用存储过程以使用 ExecuteNonQuery 执行还原。然后它在新恢复的数据库上运行第二个存储过程。有时(并非总是)第二个存储过程失败并显示错误:

无法打开数据库“dbnamehere”。它正在恢复中。

我的理解是在第一个 ExecuteNonQuery 完成之前不应将控制权传递给第二个 ExecuteNonQuery。那么,为什么会发生这种情况?有什么办法解决这个问题?

C#

command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = @"dbnamehere.dbo.sprocDailyRestore";
command.CommandTimeout = 3600;
command.ExecuteNonQuery();

sql

ALTER DATABASE dbnamehere SET single_user WITH ROLLBACK IMMEDIATE;

RESTORE DATABASE dbnamehere 
FROM disK = ''C:\mypathhere\filename.bak'' 
WITH MOVE ''filename'' TO ''C:\MSsql\Data\dbnamehere_Primary_Data.mdf'',MOVE ''ETLStaging_4D600DAC'' TO ''C:\MSsql\Data\dbnamehere_ETLStaging_Data.mdf'',MOVE ''RealAnalytics_7AFB9B94'' TO ''C:\MSsql\Data\dbnamehere_Analytics_Data.mdf'',MOVE ''filename_log'' TO ''C:\MSsql\Data\dbnamehere_Primary_Log.ldf'',REPLACE,norECOVERY;

RESTORE DATABASE dbnamehere 
FROM disK = ''C:\scheduled-tasks\RealPageDownloader\Repo\filename.diff'' 
WITH MOVE ''filename'' TO ''C:\MSsql\Data\dbnamehere_Primary_Data.mdf'',REPLACE;


ALTER DATABASE dbnamehere SET multi_user;

我应该注意到这两个存储过程都是使用 ExecuteNonQuery 执行的,并且两个存储过程都位于与正在恢复的数据库不同的数据库中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于c# – 内部循环中的ExecuteNonQueryc#循环结构的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar、asp.net EXECUTENONQUERY()返回值介绍、c# ExecuteScalar和ExecuteNonQuery、C# SQL ExecuteNonQuery 在查询完成之前返回控制权等相关内容,可以在本站寻找。

本文标签: