编辑:
我的问题不再是问题了:我重做了我的表演测试并且我做了一个致命的愚蠢错误:我忘记了一个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中管理它?如何在数据库中进行大量写作?对此有什么好处?
我的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添加多个参数?可能吗?
我正在使用 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) 我是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) 我正在阅读一组结果,但遇到数据库可能返回类型的可空版本的问题,例如a double或int.
我想知道是否可以使用读者的架构信息将类型定义转换为可空版本.如?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) 我已经看到使用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) 有没有办法从不失败的情况下获取Reader对象?SqlCommand.ExecuteReaderSqlException
在 SSMS 中,对于此命令:
RAISERROR (15600, 12, 5, 'example');
SELECT * FROM TableName
Run Code Online (Sandbox Code Playgroud)
我得到了错误信息 + 结果窗格TableName。
当我SqlCommand.ExecuteReader 执行这个命令时,我得到一个SqlException,但我无法得到结果数据。有没有办法跳过异常并处理Reader对象?
C#SqlConnection支持多少个并发语句?
假设我正在处理运行 10 个线程的 Windows 服务。所有线程使用相同的SqlConnection对象但不同的SqlCommand对象,并在不同的表或相同的表但不同的数据上执行选择、插入、更新和删除等操作。它会起作用吗?单个SqlConnection对象能否同时处理 10 条语句?
大家好我有这个代码:
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
我正在尝试写这一行:
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'.
sqlcommand ×10
c# ×9
sql ×4
sql-server ×3
.net ×1
asp.net ×1
batch-file ×1
insert ×1
nullable ×1
parameters ×1
performance ×1
powershell ×1
sqlite ×1
ssms ×1