标签: sqlcommand

System.Data.SQLCommand中的Unicode会发生什么

我有一个SQLCommand:

"更新客户设置名称= @name其中code = @code"

而这段代码:

cmd.Parameters[0].Value = "?????";//(some Unicode characters)  
cmd.Parameters[1].Value = 1;  
cmd.ExecuteNonQuery();  
Run Code Online (Sandbox Code Playgroud)

或者这段代码:

        UpdateCommand.CommandText = "UPDATE [Customers] SET [Name] = @p1 WHERE (([Code] = @p2) AND ((@p3 = 1 AND [Name] IS NULL) OR ([Name] = @p4)))";
        UpdateCommand.Parameters.Add("@p1", System.Data.SqlDbType.SmallInt, 0, "Name");
        UpdateCommand.Parameters.Add("@p2", System.Data.SqlDbType.NVarChar, 0, "Code");
        UpdateCommand.Parameters.Add("@p3", System.Data.SqlDbType.NText, 0, "Name");
        UpdateCommand.Parameters.Add("@p4", System.Data.SqlDbType.SmallInt, 0, "Name");
Run Code Online (Sandbox Code Playgroud)

当我选择客户表时,我有很多"?".
为什么SQLCommand在使用SQLDataAdapter时工作正常?
如何将我的Unicode数据转换为ANSI?

编辑:
换句话说:
SQLDataAdapter使用什么代码?
任何人都有.net框架的那部分的源代码?

.net unicode sqlcommand

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

可以由System.Data.SqlClient.SqlCommand对象执行的T-SQL有哪些限制?

我有一些像这样lloks的Transact-SQL,它可以通过SqlCommand对象执行,还是我需要开始学习Sql管理对象?

BEGIN TRANSACTION
BEGIN TRY

    IF NOT EXISTS
    (
        SELECT * 
        FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_CATALOG = (SELECT DB_NAME())
        AND TABLE_NAME = 'SchemaVersion'
    )
        BEGIN
            Print 'Migrating up...'

            CREATE TABLE SchemaVersion (
                Id INT IDENTITY(1,1) NOT NULL,
                Version INT NOT NULL,
                CONSTRAINT PK_SchemaVersion PRIMARY KEY CLUSTERED (
                    Id ASC
                )
            )

            INSERT INTO SchemaVersion (Version) VALUES(1)

            PRINT 'Migrated from 0 to 1'
        END
    ELSE IF (SELECT Version FROM SchemaVersion) = 1
        BEGIN
            Print 'Migrating down...'

            DROP TABLE Dia_SchemaVersion

            PRINT 'Migrated from …
Run Code Online (Sandbox Code Playgroud)

.net t-sql sql-server migration sqlcommand

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

如何在异常时关闭DataReader

我的数据层的一些方法中有以下代码:

StringBuilder sb = new StringBuilder();
SqlCommand s = new SqlCommand(sb.ToString(), conn);
try 
{ 
    SqlDataReader dr = s.ExecuteReader(); 
    while(dr.Read())
      DoSomething(dr);
}
catch (Exception ex)
{ 
    sb.Append(Util.ExceptionRecursive(ex)); 
}
Run Code Online (Sandbox Code Playgroud)

事情是,博士永远不会在例外的情况下关闭.当其他方法试图访问另一个数据读取器时,它会抛出另一个异常,例如"另一个数据扩展器连接到数据库"

我想在任何情况下关闭我的DataReader.但是这个:

sb = new StringBuilder();
SqlCommand s = new SqlCommand(sb.ToString(), conn);
SqlDataReader dr;
try 
{
    dr = s.ExecuteReader(); 
    while(dr.Read())
      DoSomething(dr);
}
catch (Exception ex)
{ 
    sb.Append(Util.ExceptionRecursive(ex)); 
}
finally
{
    dr.Close();
}
Run Code Online (Sandbox Code Playgroud)

不会工作,因为如果异常dr可能没有数据,并且不会编译.

那我该怎么办?

c# .net-1.1 sqlcommand sqldatareader

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

SqlCommand.Prepare方法要求所有参数都具有显式设置类型

我在WCF Web服务中有以下代码片段,它根据提供的字典值的格式构建一组where条件.

public static Dictionary<string, string>[] VehicleSearch(Dictionary<string, string> searchParams, int maxResults)
{
    string condition = "";
    foreach (string key in searchParams.Keys)
    {
        //Split out the conditional in case multiple options have been set (i.e. SUB;OLDS;TOY)
        string[] parameters = searchParams[key].Split(';');
        if (parameters.Length == 1)
        {
            //If a single condition (no choice list) check for wildcards and use a LIKE if necessary
            string predicate = parameters[0].Contains('%') ? " AND {0} LIKE @{0}" : " AND {0} = @{0}";
            condition += String.Format(predicate, key); …
Run Code Online (Sandbox Code Playgroud)

c# t-sql sqlcommand prepared-statement

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

无法在命令行窗口上gzip我的mysqldump

我正在尝试备份我的MySQL数据库并压缩文件.

每次我尝试运行此命令时......

C:\wamp\bin\mysql\mysql5.5.24\bin\mysqldump.exe -u usernam -ppassword db_name | gzip > sites\www.site.com-local\backups\backup-date.sql.gz
Run Code Online (Sandbox Code Playgroud)

我得到的只是一个错误,说"'gzip'不被识别为内部或外部命令,可操作程序或批处理文件'

我使用了以下资源,希望他们能提供帮助,但什么也没做

http://www.zigpress.com/2009/04/09/enabling-gzip-on-wamp/ http://dnhome.wordpress.com/2011/10/06/apache-wampserver-enable-compression-gzip/ http://www.dewebbouwmeester.nl/enabling-gzip-on-wamp/

所有人都说同样的事情但没有任何反应.

有人可以对我做错了吗?

mysql command-line sqlcommand mysqldump

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

单个SqlConnection具有Transaction,多个命令的情况

我试图只使用一个连接并一起运行两个命令,一个使用事务,一个不使用.

没有跟踪/日志记录功能,因为此解决方案部署在另一个位置.因此,当流程部分失败时,我至少可以按照日志进行操作.

我将在这里添加我的测试代码:

SqlConnection connection = GetConnection();
SqlTransaction transaction = null;

try
{
    connection.Open();
    transaction = connection.BeginTransaction();

    SqlCommand logCommand = new SqlCommand("Log before main command", connection);
    logCommand.ExecuteNonQuery();

    string sql = "SELECT 1";
    SqlCommand command = new SqlCommand(sql, connection, transaction);
    int rows = command.ExecuteNonQuery();

    logCommand = new SqlCommand("Log after main command", connection);
    logCommand.ExecuteNonQuery();

    // Other similar code

    transaction.Commit();
    command.Dispose();
}
catch { /* Rollback etc */ }
finally { /* etc */ }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery要求命令具有事务.该命令的Transaction属性尚未初始化.

如果没有其他无交易连接,有没有办法实现我想要做的事情?

或者,如果有一个更好的建议,以不同的方式通过单个连接优化我的代码,我就可以开始学习它.

c# sqlcommand sqlconnection sqltransaction

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

SqlClient.SqlCommand.ExecuteScalarAsync 的行为类似于同步调用

我已将我的应用程序精简到最小的 POC,但仍然得到相同的效果。看来 ExecuteScalarAsync 的行为类似于同步调用。我认为,当遇到等待时,异步方法中的其余代码将暂停,并且消息泵返回并从消息队列获取另一条消息,从而允许 UI 继续。当标量调用完成时,异步方法的剩余部分将被放回到消息队列中,以便它完成。

当这个小应用程序运行时,TestConnectionAsync 方法会挂起 UI,并且不会执行其他消息,直到 ExecuteScalarAsync 调用超时。

我做错了什么,还是这个异步方法的行为像同步方法?

该表单有两个按钮。第一个运行异步方法,第二个尝试使用令牌取消异步方法。我从来没有机会点击第二个按钮。

Form1.cs

public partial class Form1 : Form
{
    private DB _db = new DB();
    private string _nl = Environment.NewLine;

    public Form1()
    {
        InitializeComponent();
    }

    private async void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = "Starting" + _nl;
        string resultString
            = (string) await _db.TestConnectionAsync();
        textBox1.AppendText(resultString + _nl);
        textBox1.AppendText("Done" + _nl);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        textBox1.AppendText("Cancelling..." + _nl);
        _db.CancelTest();
        textBox1.AppendText("Submitted Cancel Token" + _nl);
    } …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous sqlcommand async-await

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

C# 将参数传递给 Postgres Npgsqlcommand DO 块

尝试将参数传递给 DO 块时,出现错误“42883:运算符不存在:整数=@整数”Npgsql.PostgresException:

var cmd = new NpgsqlCommand();
cmd.CommandText = 
@"DO $$ 
BEGIN
IF EXISTS (SELECT id FROM pub.table1 WHERE id = @id) THEN
    UPDATE pub.table1 
    SET Field1 = @Field1
       ,Field2 = @Field2
    WHERE id = @id;
ELSE
    INSERT INTO pub.table1 (id, Field1, Field2) 
    VALUES (@id, @Field1, @Field2);
END IF;

END $$;";

cmd.Parameters.AddWithValue("@id", 1);
cmd.Parameters.AddWithValue("@Field1", "text");
cmd.Parameters.AddWithValue("@Field2", "text2");
Run Code Online (Sandbox Code Playgroud)

否则,与 postgres 的连接可以工作,并且(经典)查询在传递参数时也可以工作;例如:

cmd.CommandText = @"SELECT * FROM pub.table1 WHERE id = @id;";
Run Code Online (Sandbox Code Playgroud)

是否无法将参数传递给“DO”块,或者我遗漏了什么?

谢谢。中号

c# postgresql sqlcommand npgsql

5
推荐指数
0
解决办法
1731
查看次数

如何用参数替换的SQL捕获?(.NET,SqlCommand)

如果在参数替换后有一种简单的方法可以获得完整的SQL语句?即,我想保留该程序运行的所有SQL的日志文件.

或者,如果我想这样做,我只想摆脱参数,并用一个大字符串完成旧学校的整个查询吗?

简单示例:我想捕获输出:

SELECT subcatId FROM EnrollmentSubCategory WHERE catid = 1

..来自这段代码:

    Dim subCatSQL As String = "SELECT subcatId FROM EnrollmentSubCategory WHERE catid = @catId"
    Dim connectionString As String = "X"
    Dim conn As New SqlConnection(connectionString)
    If conn.State = ConnectionState.Closed Then
        conn.Open()
    End If
    Dim cmd As New SqlCommand(subCatSQL, conn)
    With cmd
        .Parameters.Add(New SqlParameter("@catId", SqlDbType.Int, 1)) 
    End With

    Console.WriteLine("Before: " + cmd.CommandText)
    cmd.Prepare()
    Console.WriteLine("After: " + cmd.CommandText)
Run Code Online (Sandbox Code Playgroud)

我曾假设Prepare()会做替换,但显然不是.

思考?建议吗?提前致谢.

.net sql vb.net ado.net sqlcommand

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

如何使用MySqlCommand和prepare语句插入多行?(#C)

Mysql给出了如何使用prepare语句和.NET插入行的示例:http: //dev.mysql.com/doc/refman/5.5/en/connector-net-programming-prepared.html

它看起来像那样,因为在每次迭代结束时调用cmd.ExecuteNonQuery()::

INSERT INTO VALUES()...;INSERT INTO VALUES()...;INSERT INTO VALUES()...;
Run Code Online (Sandbox Code Playgroud)

可以使用像这样的准备语句来完成:

INSERT INTO all values...
Run Code Online (Sandbox Code Playgroud)

更多解释::


mysql示例中的代码(每次迭代中cmd.ExecuteNonQuery()):

MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;

conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();

conn.ConnectionString = strConnection;

try
{
    conn.Open();
    cmd.Connection = conn;

    cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)";
    cmd.Prepare();

    cmd.Parameters.AddWithValue("@number", 1);
    cmd.Parameters.AddWithValue("@text", "One");

    for (int i=1; i <= 1000; i++)
    {
        cmd.Parameters["@number"].Value = i;
        cmd.Parameters["@text"].Value = "A string value";

        cmd.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

*我想要的代码(cmd.ExecuteNonQuery();在所有迭代之后):*

MySql.Data.MySqlClient.MySqlConnection conn; …
Run Code Online (Sandbox Code Playgroud)

c# mysql sqlcommand connector-net

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