标签: sqlcommand

C#-SQL:如何执行一批StoredProcedure?

编辑:
我的问题不再是问题了:我重做了我的表演测试并且我做了一个致命的愚蠢错误:我忘记了一个x1000从毫秒获得秒:/对不起那些家伙.
有关信息:
- 我从PC到本地网络上的DataBase服务器每秒进行1900次更新.
- 如果程序与DB相同,则每秒3.200次更新.
- 我的PC上DataBase服务器每秒3.500次更新我不会重新创建并重新打开一个新的SQLConnection.
- 批量文本每秒5.800次更新.对于我的10.000行,如果需要5秒钟,我的程序就可以了.很抱歉让您担心.

实际上,我使用SQL存储的prodedure在我的数据库中创建一行以避免SQL注入.在C#中我有以下方法:

public void InsertUser(string userCode)
{
   using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
   {
      SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
      sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
      sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
      sqlConnection.Open();
      sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
   }
} 
Run Code Online (Sandbox Code Playgroud)

当我有一行或两行插入时,它很棒.但如果我需要创建1.000个用户和10.000个产品以及5000个宠物,那么这不是最好的解决方案:我将在网络传输中浪费大量时间.

我相信,没有签入,我只能使用有限的回调.所以我不想打电话10.000次:

sqlCommand.BeginExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)

另一种方法是创建批处理文本,但存在SQL注入风险(并且很难看).

是否有一个'SqlCommandList'对象在.Net中管理它?如何在数据库中进行大量写作?对此有什么好处?

c# performance stored-procedures sqlcommand batch-file

1
推荐指数
1
解决办法
2万
查看次数

使用SqlCommand,如何向其对象添加多个参数,通过sql表中的winform插入

我的winform中有十个文本框,我需要将这些文本框中键入的文本保存到sql数据库表的10列中.所以,我应该这样写:

INSERT INTO item (c1,c2,c3...,c10) values (@a,@b....@j) 

cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
.
.
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;
Run Code Online (Sandbox Code Playgroud)

每个文本框的十个单独查询:

INSERT INTO item (c1) values (@a)
cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

INSERT INTO item (c2) values (@b) 
cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
INSERT INTO item (c10) values (@j)
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;
Run Code Online (Sandbox Code Playgroud)

或者,请建议一个有效的代码.

如何在单个语句中向cmd添加多个参数?可能吗?

.net c# sql sql-server-2005 sqlcommand

1
推荐指数
2
解决办法
4万
查看次数

C# SQLite 和 SQL 命令指定的强制转换无效

我正在使用 SQlite 和 sql 命令。我正在尝试制作一个测验程序,我有一个循环,它从我的数据库中读取问题和答案并将它们添加到列表中。我还有一个布尔值,用于定义从数据库中选取的答案是正确还是错误。

我的问题是,当我的循环第一次执行代码并将 true 和 false 添加到我的布尔数组时,所有这些工作正常,但第二次我的循环执行时它会抛出异常:SPECIFIED CAST NOT VALID。失败的方法如下所示:我在代码失败的地方做了评论:

    public void GetQuestion(int categoryRef)
    {
        Console.Clear();

        int arrayIndex = 0;

        int qListIndex = 0;

        int idListIndex = 0;

        List<string> qList = new List<string>();

        List<int> idList = new List<int>();

        int ansNr = 1;

        bool[] isTrue = new bool[3];


        SQLiteDataReader sqReader;

        SQLiteCommand sqCommand = new SQLiteCommand(sqConnection);

        try
        {
            sqCommand.CommandText = "SELECT Question, ID FROM Questions WHERE CategoryRef=" + categoryRef.ToString();
            sqCommand.Connection.Open();
            sqReader = sqCommand.ExecuteReader();
            foreach (var item in sqReader)
            { …
Run Code Online (Sandbox Code Playgroud)

c# sqlite sqlcommand

1
推荐指数
1
解决办法
6693
查看次数

SqlCommand.ExecuteReader并越过第一行

我是ASP.NET的新手,作为一个自我选择的任务,我要创建一个简单的博客.它已经接近完成,但我遇到了一个问题.从代码中可以看出,我首先使用查询从SQL Server数据库中返回博客条目的数量.然后,for循环从所有行读取标题,日期和文本内容,并创建一个html div,并将其加载到其中. 除了一件事之外,它的工作原理很好:ExecuteScalar()只读取第一行,它将为每次迭代返回相同的值,导致所有博客条目都相同.

我需要一种方法让读者继续每次迭代.我已经考虑过将SQLbulkcopy放到另一个表中,然后我可以删除for循环中的顶行,但是如果要在每个Page_Load上完成它,这似乎会减慢页面的速度.

string SQLreadTitle = "Select BLOG.BlogTitle from BLOG order by BlogID DESC";
string SQLreadDate = "Select BLOG.BlogDate from BLOG order by BlogID DESC";
string SQLreadText = "Select BLOG.BlogText from BLOG order by BlogID DESC";
string SQLcountIDs = "Select count(BlogID) from BLOG";

protected void Page_Load(object sender, EventArgs e)
{

    int i;
    SqlConnection con = new SqlConnection(cnString);
    con.Open();

    SqlCommand countIDs = new SqlCommand(SQLcountIDs, con);
    int count = Convert.ToInt32(countIDs.ExecuteScalar());



    for (i = 0; i < count; i++)
    {
        SqlCommand …
Run Code Online (Sandbox Code Playgroud)

c# sql asp.net sqlcommand executescalar

1
推荐指数
1
解决办法
1万
查看次数

将`Type`转换为`Nullable <Type>`

我正在阅读一组结果,但遇到数据库可能返回类型的可空版本的问题,例如a doubleint.

我想知道是否可以使用读者的架构信息将类型定义转换为可空版本.如?double?int?

抛开所有SQL的东西,有没有办法一般地进行这种类型的转换?从一个Type物体到一个物体Nullable<Type>.

using (SqlConnection connection = new SqlConnection("... connection string here ..."))
using (SqlCommand command = connection.CreateCommand())
{
    command.CommandText = ".... some sql here ....";

    var results = new DataTable(schema.TableName);

    using (var reader = await command.ExecuteReaderAsync())
    using (var schema = reader.GetSchemaTable())
    {
        for (int i = 0; i < schema.Rows.Count; i++)
        {
            var name = (string)schema.Rows[i]["ColumnName"];
            var type = (Type)schema.Rows[i]["DataType"];
            var allowNulls = (bool)schema.Rows[i]["AllowDBNull"];

            if (allowNulls)
            { …
Run Code Online (Sandbox Code Playgroud)

c# nullable sqlcommand

1
推荐指数
1
解决办法
112
查看次数

向 SQLCommand 添加参数并稍后添加值

我已经看到使用Parameters.Addvs的不同讨论Parameters.AddWithValue(一个是明确的,另一个不是),但这不是我的问题。

我正在定义一个命令,该命令将用于对数据库进行多次插入。我想我会做以下事情:

[define command]
[add parameters (including a batchid not known at this time)]

[enter loop]
   [create new batchid]
   [set parameter value]
   [execute command]
[next]
Run Code Online (Sandbox Code Playgroud)

这意味着我的参数是事先明确定义的,并且我在循环中设置了它们的值。代码如下所示:

$SqlCmdAdd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmdAdd.CommandType = [System.Data.CommandType]::StoredProcedure
$SqlCmdAdd.CommandText = "AddBatch"
$SqlCmdAdd.Parameters.Add("@RunId", [Data.SQLDBType]::UniqueIdentifier)
$SqlCmdAdd.Parameters.Add("@RunType", [Data.SQLDBType]::NVarChar, 50)
$SqlCmdAdd.Connection = $SqlConnection
Run Code Online (Sandbox Code Playgroud)

在循环中,我想我可以做这样的事情:

# Generate GUID to be used as a BatchID
$batchID = [guid]::NewGuid()

# I tried both using the parameter name, as well as their numeric order. Neither worked
$SqlCmdAdd.Parameters["@RunId"].Value = $batchID …
Run Code Online (Sandbox Code Playgroud)

parameters powershell sqlcommand

1
推荐指数
1
解决办法
1434
查看次数

异常后读取 SqlDataReader -- LIKE SSMS 结果窗格

有没有办法从不失败的情况下获取Reader对象?SqlCommand.ExecuteReaderSqlException

在 SSMS 中,对于此命令:

RAISERROR (15600, 12, 5, 'example');
SELECT   * FROM TableName
Run Code Online (Sandbox Code Playgroud)

我得到了错误信息 + 结果窗格TableName

当我SqlCommand.ExecuteReader 执行这个命令时,我得到一个SqlException,但我无法得到结果数据。有没有办法跳过异常并处理Reader对象?

c# sql-server ssms sqlcommand

1
推荐指数
1
解决办法
46
查看次数

SqlConnection 支持多少并发语句

C#SqlConnection支持多少个并发语句?

假设我正在处理运行 10 个线程的 Windows 服务。所有线程使用相同的SqlConnection对象但不同的SqlCommand对象,并在不同的表或相同的表但不同的数据上执行选择、插入、更新和删除等操作。它会起作用吗?单个SqlConnection对象能否同时处理 10 条语句?

c# sql-server multithreading sqlcommand sqlconnection

1
推荐指数
1
解决办法
104
查看次数

SqlCommand INSERT INTO查询不执行

大家好我有这个代码:

SqlCommand scom = new SqlCommand(
                                "INSERT INTO klient(name,surname) 
                                values(@kname,@ksurname)", 
                                conn);

scom.Parameters.AddWithValue("@kname", kname.Text);
scom.Parameters.AddWithValue("@ksurname", ksurname.Text);
conn.Open();
DataTable dt = new DataTable();
SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM klient", spojeni);
SDA.Fill(dt);
conn.Close();
Run Code Online (Sandbox Code Playgroud)

它应该插入来自文本框的数据:kname,ksurname,但它关闭表单而不在MS SQL表中显示它们klient

c# sql sqlcommand insert executereader

0
推荐指数
1
解决办法
2万
查看次数

SQL中"用户"附近的语法不正确

我正在尝试写这一行:

SqlCommand MySqlCommand = new SqlCommand(@
   "INSERT INTO User(NAME ,PASSWORD,PUBLISH_FOLDER,ACTIVE,IP,PORT)
            Values ('shula','Aa1234','study','true','1015','8080')"
           , MyConnection);
Run Code Online (Sandbox Code Playgroud)

我得到的例外是:

incorrect syntax near the keybord 'User'.

c# sql sql-server sqlcommand

0
推荐指数
1
解决办法
145
查看次数