這是一個簡單的程式,它創建一個測驗資料庫,其中包含一個包含兩個型別列的表VARCHAR(50)和VARBINARY(8000). 我想byte[0]在varbinary列中保存一個空BINVAL陣列(
如何將空位元組陣列保存在varbinary列中?
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace ConsoleApplication1
{
internal class Program
{
static string connString = "Server=localhost\\SQLEXPRESS;Integrated security=True;database=master";
public static void Main(string[] args)
{
var sqlCommandParams = new List<SqlParameter>();
ExecuteParametrizedDbCommand("Use master; CREATE DATABASE TestDB", sqlCommandParams);
ExecuteParametrizedDbCommand("USE TestDB; CREATE TABLE SampleData (STRVAL VARCHAR(50), BINVAL VARBINARY(8000))", sqlCommandParams);
sqlCommandParams.Add(new SqlParameter
{
ParameterName = "@STRVAL",
SqlDbType = SqlDbType.VarChar,
Value = string.Empty
});
sqlCommandParams.Add(new SqlParameter
{
ParameterName = "@BINVAL",
SqlDbType = SqlDbType.Binary,
Value = new byte[0]
});
ExecuteParametrizedDbCommand(
"USE TestDb INSERT INTO SampleData (STRVAL, BINVAL) VALUES (@STRVAL, @BINVAL)",
sqlCommandParams);
}
public static void ExecuteParametrizedDbCommand(string command, IEnumerable<SqlParameter> commandParams)
{
try
{
using( var conn = new SqlConnection(connString) )
{
using( var cmd = conn.CreateCommand() )
{
cmd.CommandText = command;
cmd.Parameters.AddRange(commandParams.ToArray());
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
catch( Exception ex )
{
Console.WriteLine(ex.Message);
}
}
}
}
uj5u.com熱心網友回復:
你需要使用VarBinarynot Binary。我還建議您指定引數的長度。
此外,您可能應該只更改要連接的資料庫,而不是USE陳述句。
您不應該對連接字串進行硬編碼,而是將其放入設定檔案中。然后您可以使用SqlConnectionBuilder將資料庫更改為masterforCREATE DATABASE命令。
你應該為每個命令使用一個新的引數串列。你甚至可以使用params陣列。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace ConsoleApplication1
{
internal class Program
{
public static void Main(string[] args)
{
var connBuilder = new SqlConnectionStringBuilder(Properties.ConnectionString);
connBuilder.Database = "master";
using(var conn = new SqlConnection(connBuilder.ConnectionString))
ExecuteParametrizedDbCommand(conn, "CREATE DATABASE TestDB");
ExecuteParametrizedDbCommand("CREATE TABLE SampleData (STRVAL VARCHAR(50), BINVAL VARBINARY(8000))");
ExecuteParametrizedDbCommand(
"INSERT INTO SampleData (STRVAL, BINVAL) VALUES (@STRVAL, @BINVAL)",
new SqlParameter("@STRVAL", SqlDbType.VarChar, 50) {
Value = string.Empty
},
new SqlParameter("@BINVAL", SqlDbType.VarBinary, -1) {
Value = new byte[0]
});
}
public static void ExecuteParametrizedDbCommand(string command, params SqlParameter[] commandParams)
{
using( var conn = new SqlConnection(Properties.ConnectionString) )
ExecuteParametrizedDbCommand(conn, command, commandParams);
}
public static void ExecuteParametrizedDbCommand(SqlConnection conn, string command, params SqlParameter[] commandParams)
{
try
{
using( var cmd = new SqlCommand(command, conn) )
{
if(commandParams != null)
cmd.Parameters.AddRange(commandParams.ToArray());
conn.Open();
cmd.ExecuteNonQuery();
}
}
catch( Exception ex )
{
Console.WriteLine(ex.Message);
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410527.html
標籤:
上一篇:每隔一行合并成一行
