SQL Server 接続 C#, VB.net

C#, VB.netでSQL Serverに接続する簡単な例。

C#

//SQL Serverへの接続
private int SQLExec()
{
  try
  {
    var res = 0;
    var connectionString = GetConnectionString();
    var queryString = “SELECT count(*) FROM ~”;

    using (SqlConnection cn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(queryString, cn))
    {
      cn.Open();
      cmd.CommandType = CommandType.Text;
      cmd.CommandTimeout = 120;
      res = (int)cmd.ExecuteScalar();
    }

    return res;
  }
  catch (Exception ex)
  {
    var ErrCaption = Application.ProductName + “(” + System.Reflection.MethodBase.GetCurrentMethod().Name + “)”;
    Debug.WriteLine(ErrCaption + ” ” + ex.Message);
    return -1;
  }
}

//接続文字列作成 Windows認証
private string GetConnectionString()
{
  var builder = new SqlConnectionStringBuilder()
  {
    IntegratedSecurity = true, // Windows認証
    InitialCatalog = “DB名”,
    DataSource = “(local)”
  };
  return builder.ToString();
}

//接続文字列作成 SQL Server認証
private string GetConnectionString2()
{
  var builder = new SqlConnectionStringBuilder()
  {
    IntegratedSecurity = false, // SQL Server認証
    InitialCatalog = “DB名”,
    DataSource = “(local)”,
    UserID = “ユーザー名”,
    Password = “パスワード”
  };
  return builder.ToString();
}


VB.net

‘SQL Serverへの接続
Private Function SQLExec() As Integer
  Try
    Dim Res As Integer = 0
    Dim connectionString As String = GetConnectionString()
    Dim queryString As String = “SELECT count(*) FROM ~”

    Using cn As New SqlConnection(connectionString)
      Using cmd As New SqlCommand(queryString, cn)
        cn.Open()
        cmd.CommandType = CommandType.Text
        cmd.CommandTimeout = 120
        Res = cmd.ExecuteScalar
      End Using
    End Using

    Return Res
  Catch ex As Exception
    Dim ErrCaption As String = My.Application.Info.ProductName & “(” & Reflection.MethodBase.GetCurrentMethod.Name & “)”
    Debug.WriteLine(ErrCaption + ” ” + ex.Message)
    Return -1
  End Try
End Function

‘接続文字列作成 Windows認証
Private Function GetConnectionString() As String
  Dim builder = New SqlConnectionStringBuilder With {
    .IntegratedSecurity = True, ‘Windows認証
    .InitialCatalog = “DB名”,
    .DataSource = “(local)”
  }
  Return builder.ToString
End Function

‘接続文字列作成 SQL Server認証
Private Function GetConnectionString2() As String
  Dim builder = New SqlConnectionStringBuilder With {
    .IntegratedSecurity = False, ‘SQL Server認証
    .InitialCatalog = “DB名”,
    .DataSource = “(local)”,
    .UserID = “ユーザー名”,
    .Password = “パスワード”
  }
  Return builder.ToString
End Function

ZXing.Netを利用してバーコード作成、読取(C#, VB.Net)

C#, VB.NetでZXing.Netを利用してバーコードを作成する例。

(1) ZXing.Netをインストール
Visual Studioの[NuGet パッケージ マネージャー]-[NuGet パッケージの管理]でインストールする。
現時点のバージョンは ZXing.Net.0.16.6

(2) C#の例

//作成
private void ZXing_Write()
{

var writer = new ZXing.BarcodeWriter();
//バーコードの種類
writer.Format = ZXing.BarcodeFormat.QR_CODE;
//サイズ
writer.Options.Height = 200;
writer.Options.Width = 200;
//マージン
writer.Options.Margin = 1;
//文字コード
writer.Options.Hints.Add(ZXing.EncodeHintType.CHARACTER_SET, “Shift_JIS”);
//エラー訂正レベル
writer.Options.Hints.Add(ZXing.EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.L);
//作成
pictureBox1.Image = writer.Write(“あいうえお”);

}

//読取
private void ZXing_Read()
{

var img = new Bitmap(pictureBox1.Image);

var reader = new ZXing.BarcodeReader();

//90度ずつ回転させて読取
//reader.AutoRotate = true;
//読み取れなかったときに白黒反転。デコードが遅くなるので注意。
//reader.TryInverted = true;
//数字無しの白黒バーコードの場合
//reader.Options.PureBarcode = true;
//ビットマップをよりDeepに解析
//reader.Options.TryHarder = true;
//文字数制限
//var len1 = new int[] { 10 };
//reader.Options.AllowedLengths = len1;
//コードの種類を限定。複数指定可能。
var BarcodeFormat1 = new List();
BarcodeFormat1.Add(ZXing.BarcodeFormat.QR_CODE); //QR_CODEに限定
reader.Options.PossibleFormats = BarcodeFormat1;

//読取
var result = reader.Decode(img);
if (result != null)
{
label1.Text = result.BarcodeFormat.ToString();
label2.Text = result.Text;
}

img.Dispose();

}

(3) VB.Netの例

‘作成
Private Sub ZXing_Write()

Dim writer As New ZXing.BarcodeWriter
‘バーコードの種類
writer.Format = ZXing.BarcodeFormat.QR_CODE
‘サイズ
writer.Options.Height = 200
writer.Options.Width = 200
‘マージン
writer.Options.Margin = 1
‘文字コード
writer.Options.Hints(ZXing.EncodeHintType.CHARACTER_SET) = “Shift_JIS”
‘エラー訂正レベル
writer.Options.Hints(ZXing.EncodeHintType.ERROR_CORRECTION) = ZXing.QrCode.Internal.ErrorCorrectionLevel.L

‘作成
PictureBox1.Image = writer.Write(“あいうえお”)

End Sub

‘読取
Private Sub ZXing_Read()

Dim img = New Bitmap(PictureBox1.Image)

Dim reader = New ZXing.BarcodeReader()

”90度ずつ回転させて読取
‘reader.AutoRotate = True
”読み取れなかったときに白黒反転。デコードが遅くなるので注意。
‘reader.TryInverted = True
”数字無しの白黒バーコードの場合
‘reader.Options.PureBarcode = True
”ビットマップをよりDeepに解析
‘reader.Options.TryHarder = True
”文字数制限
‘Dim len1() As Integer = {10}
‘reader.Options.AllowedLengths = len1

‘コードの種類を限定。複数指定可能。
Dim BarcodeFormat1 As New List(Of ZXing.BarcodeFormat)
BarcodeFormat1.Add(ZXing.BarcodeFormat.QR_CODE) ‘QR_CODEに限定
reader.Options.PossibleFormats = BarcodeFormat1

‘読取
Dim result As ZXing.Result = reader.Decode(img)
If (result IsNot Nothing) Then
Label1.Text = result.BarcodeFormat.ToString
Label2.Text = result.Text
End If

img.Dispose()

End Sub


2021(令和3)年2月20日 NuGetからインストールできるようになったので記事を書き直し。C#のコードを追加。

SQL Server プログラムからストアドにデーターテーブルを渡す方法

VB.NETなどのプログラムからSQL Serverのストアドへテーブルデーターを渡すには、ユーザー定義テーブル型を利用する。
なお、ユーザー定義テーブル型はSQL Server2008以降で使用できる。

手順(1) ユーザー定義テーブル型の作成と権限設定

    CREATE TYPE [dbo].[UserTableTypeInt1] AS TABLE(
    [id] [int] NULL
    )

    ストアドで使うには作成したユーザー定義型に実行(EXECUTE)権限を設定する必要がある。
    GRANT EXECUTE ON TYPE::[dbo].[UserTableTypeInt1] TO ユーザー名;

    ManagementStudioから権限を設定する場合は、
    [プログラミング]-[種類]-[ユーザー定義テーブル型]で、作成したテーブル型を右クリックでプロパティーから権限を設定するが、なぜか実行権限は表示されないので制御(CONTROL)権限を設定する。
    制御権限を設定するとその他の全ての権限も暗黙的に設定される。

手順(2) ストアドの作成

    CREATE PROCEDURE stTest1
       @a1 UserTableTypeInt1 READONLY — ユーザー定義テーブル型
    AS
    BEGIN
        UPDATE Table1 SET c1 = 0 WHERE ID IN (SELECT id FROM @a1)
    END
    GO

手順(3) 呼び出し側プログラムの作成

    Dim cn As SqlClient.SqlConnection

    Private Sub Test()
        Dim cmd As New SqlClient.SqlCommand
        Try
           ‘ストアドに渡すDataTableの作成
            Dim dt1 As New DataTable
            dt1.Columns.Add(“ID”, GetType(Integer))
            dt1.Rows.Add(1)
            dt1.Rows.Add(2)
            dt1.Rows.Add(3)

            ‘ストアドの実行
            cmd.Connection = cn
            cmd.CommandText = “stTest1”
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Clear()
            cmd.Parameters.Add(“@a1”, SqlDbType.Structured)
            cmd.Parameters(“@a1”).TypeName = “UserTableTypeInt1”
            cmd.Parameters(“@a1”).Value = dt1 ‘DataTableをパラメーターとして渡す
            Dim res1 As Integer = cmd.ExecuteNonQuery()
        Finally
            cmd.Dispose()
        End Try
    End Sub


参考:
https://technet.microsoft.com/ja-jp/library/bb522526 (ユーザー定義テーブル型)