www.91084.com

GVKun编程网logo

SQLCommand ExecuteNonQuery最大CommandText长度?(sql最大长度是多长)

17

这篇文章主要围绕SQLCommandExecuteNonQuery最大CommandText长度?和sql最大长度是多长展开,旨在为您提供一份详细的参考资料。我们将全面介绍SQLCommandExec

这篇文章主要围绕SQLCommand ExecuteNonQuery最大CommandText长度?sql最大长度是多长展开,旨在为您提供一份详细的参考资料。我们将全面介绍SQLCommand ExecuteNonQuery最大CommandText长度?的优缺点,解答sql最大长度是多长的相关问题,同时也会为您带来9. 用 ExecuteSqlCommand 执行存储过程、ADO.NET 2.0中的SqlCommand.ExecutePageReader、ADO.NET基础必备之SqlCommand.Execute三方法、asp.net-mvc – 具有输出参数的ExecuteSqlCommand的实用方法。

本文目录一览:

SQLCommand ExecuteNonQuery最大CommandText长度?(sql最大长度是多长)

SQLCommand ExecuteNonQuery最大CommandText长度?(sql最大长度是多长)

我已经在互联网上搜索了,所有内容似乎都与单个字段有关,或者只做了一个插入。我有一个迁移工具,它可以从旧的遗留数据库(超数据库)迁移到我们的SQL
ServerDB(2008)。目前,我正在从旧数据库中读取20,000条记录,并生成一个大SQLCommand.CommandText字符串,其中包含以分号分隔的20,000条插入语句。
这很好用
。但是我可以25k吗?30k?我尝试完全没有任何限制,但是当我尝试ExecuteNonQuery使用CommandText包含超过400万条INSERT语句,它说的太长了。很抱歉,我不记得确切的错误消息。我找不到有关确切限制的任何文档。对我来说很重要,因为一次可以插入的插入物越多,整个过程就越快。任何建议/链接/文档将不胜感激,谢谢!

9. 用 ExecuteSqlCommand 执行存储过程

9. 用 ExecuteSqlCommand 执行存储过程

比如你有一个存储过程

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N''[dbo].[CreateAuthor]'') AND type in (N''P'', N''PC''))

BEGIN
    EXEC dbo.sp_executesql @statement = N''
    CREATE PROCEDURE [dbo].[CreateAuthor]
        @FirstName Varchar(50),
        @LastName Varchar(50),
        @Address Varchar(100)
    AS
    INSERT INTO dbo.Authors(
        [FirstName],
        [LastName],
        [Address]
    )
    VALUES (@FirstName, @LastName, @Address)
    ''
using (var context = new BookStore())
{            
    int affectedRows = context.Database.ExecuteSqlCommand("CreateAuthor @p0, @p1, @p2",
        parameters: new[] 
        {
            "Mark",
            "Cuban",
            "23 Tsawassen Blvd."
        });
}

 

ADO.NET 2.0中的SqlCommand.ExecutePageReader

ADO.NET 2.0中的SqlCommand.ExecutePageReader

http://blog.joycode.com/liuhuimiao/

在.NET 2.0 PDC或Beta1中,可以看到SqlCommand对象新增了个ExecutePageReader方法,该方法实现了分页读取数据的功能。对于分页读取数据,在ADO.NET1.1中(当然2.0也适合)一般常用动态构造SQL语句实现:

    SqlDataReader GetPage(int pageNumber, int pageSize)
    {
       
//pageNumber: 从 0 开始计数的页码
       
//pageSize: 每页的记录数
        String command = String.Format("SELECT * FROM (SELECT TOP {0} * FROM " +
          
"Products ORDER BY ProductID) AS t1 WHERE ProductID NOT IN " +
          
"(SELECT TOP {1} ProductID FROM Products ORDER BY ProductID) ",
           pageSize
* (pageNumber + 1), pageSize * pageNumber);

        SqlConnection conn
= new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
        SqlCommand cmd
= new SqlCommand(command, conn);
        conn.Open();
        SqlDataReader dr
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
       
return dr;
    }

        有时为更好实现分页性能效果,也可以采用存储过程建立临时表的方式进行数据分页,但原理基本都差不多。在ADO.NET 2.0 PDC/Beta1中,用SqlCommand.ExecutePageReader进行数据分页:

    SqlDataReader GetPageReader(int pageNumber, int pageSize)
    {
       
int startIndex = (pageNumber - 1) * pageSize;
        String command
= "SELECT * FROM Products";
        SqlConnection conn
= new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
        SqlCommand cmd
= new SqlCommand(command, conn);
        conn.Open();
        SqlDataReader dr
= cmd.ExecutePageReader(CommandBehavior.CloseConnection, startIndex, pageSize);

       
return dr;
    }

        最后绑定第2页的5行数据(ProductID从6到10)到GridView1上:

        GridView1.DataSource = GetPage(1, 5);
        GridView1.DataBind();

        从上可以看到,用了ExecutePageReader确实简单了很多。但是,很“不幸”告诉大家,ExecutePageReader在未来版本中将不会出现,也就是说被cut掉了。至于cut的真正原因,还真不知道。不过,我试图用Reflector去看其内部,发现这样一个调用顺序:ExecutePageReader()—》SqlResultSet.CompleteOpenForPageReader()—》SqlResultSet.FetchInternal()—》执行存储过程sp_cursorfetch,也就是实际ExecutePageReader使用了SQLServer的服务器游标进行数据分页读取,但这跟它被cut是否有关?这么好用的一个功能被cut是不是有其他考虑?或许ADO.NET开发小组在鱼和熊掌取舍之间已经做了抉择,只是我还是觉得ExecutePageReader(据说SqlResultSet也被cut,然后连同ExecutePageReader被cut)被cut很可惜。


原文链接: http://blog.csdn.net/21aspnet/article/details/164010

ADO.NET基础必备之SqlCommand.Execute三方法

ADO.NET基础必备之SqlCommand.Execute三方法

SqlCommand.ExecuteNonQuery 方法

 

对连接执行 Transact-SQL 语句并返回受影响的行数。

――语法:

public override int ExecuteNonQuery()

――返回值

类型:System..::.Int32

 

受影响的行数。

 

――可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。

 

虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。

 

对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。如果正在执行插入或更新操作的表上存在触发器,则返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

 

SqlCommand. ExecuteScalar 方法

执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。

――语法:

public override Object ExecuteScalar()

 

――返回值

类型:System.Object

结果集中第一行的第一列;如果结果集为空,则为空引用(在 Visual Basic 中为 Nothing)。

 

――使用 ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。

 

――典型的 ExecuteScalar 查询可以采用类似于下面的 C# 示例的格式:

 cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";

 Int32 count = (Int32) cmd.ExecuteScalar();

 

SqlCommand.ExecuteReader 方法

将 CommandText 发送到 Connection 并生成一个 SqlDataReader。

 

――语法:

public SqlDataReader ExecuteReader()

 

――返回值

类型:System.Data.SqlClient..::.SqlDataReader

 

一个 SqlDataReader 对象。

 

——示例:

下面的示例创建一个 SqlCommand,然后通过传递两个字符串来执行它,其中一个字符串是 Transact-SQL SELECT 语句,另一个字符串用于连接至数据源。

private static void CreateCommand(string queryString,
    string connectionString)
{
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        connection.Open();

        SqlCommand command = new SqlCommand(queryString, connection);
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}", reader[0]));
        }
    }
}

 

asp.net-mvc – 具有输出参数的ExecuteSqlCommand

asp.net-mvc – 具有输出参数的ExecuteSqlCommand

我在ASP.NET MVC3应用程序中使用Entity Framework,我试图使用以下代码:
var token = "";
this.Database.ExecutesqlCommand("exec dbo.MyUsp",new sqlParameter("token",token));

我的存储过程签名是:

CREATE PROCEDURE MyUSP(@token varchar(10) OUT)
(...)

当我使用这个代码时,我收到一个错误,指出参数“@token”是预期但不提供的。

如何告诉EF,令牌参数是用于输出?

解决方法

我最终用这个来使它工作,但我相信有一个更优化的方法:
var p = new sqlParameter
{
    ParameterName = "token",DbType = System.Data.DbType.String,Size = 100,Direction = System.Data.ParameterDirection.Output
};
var resp = this.Database.sqlQuery<String>("exec dbo.usp_GetRequestToken @token",p);

return resp.First();

关于SQLCommand ExecuteNonQuery最大CommandText长度?sql最大长度是多长的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于9. 用 ExecuteSqlCommand 执行存储过程、ADO.NET 2.0中的SqlCommand.ExecutePageReader、ADO.NET基础必备之SqlCommand.Execute三方法、asp.net-mvc – 具有输出参数的ExecuteSqlCommand的相关信息,请在本站寻找。

本文标签: