C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.93362 の関連記事表示

<< 0 >>
■93362  「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/08(Sun) 11:07:01)

    分類:[.NET 全般] 

    いつもお世話になっております、たかしです。

    App.configの「接続文字列」を変数に格納してVB.NETからSQLサーバーに接続しようと思い、
    次のようなコードを書きました。
    ちなみにForm1の接続文字列TextBoxには
    "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    と入力してあります。

    Private Sub 実行Button_Click(sender As Object, e As EventArgs) Handles 実行Button.Click

    Dim cn As New SqlClient.SqlConnection
    Dim cd As New SqlClient.SqlCommand
    Dim 接続文字列 As String

    接続文字列 = Form1.接続文字列TextBox.Text
    cn.ConnectionString = 接続文字列
    cn.Open()
        cd.CommandType = CommandType.StoredProcedure
    cd.CommandText = "ストアドプロシージャ名"
    cd.Connection = cn
    cd.ExecuteNonQuery()
        cd.Dispose()
        cn.Close()
        cn.Dispose()

    End Sub

    Visual StudioのApp.configタブは次のとおりです。

    前略
    <connectionStrings>
    <add name="**********.My.MySettings.**********_SQLConnectionString"
    connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    providerName="System.Data.SqlClient" />
    </connectionStrings>
    後略

    なお、変数を用いずにダイレクトに次のように記載すると正常に動きます。
    cn.ConnectionString = "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"

    どこがいけないのでしょうか?
    どなたかお願いします。

親記事 /過去ログ161より / 関連記事表示
削除チェック/

■93364  Re[1]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/08(Sun) 11:11:11)
    No93362 (たかし さん) に返信
    > いつもお世話になっております、たかしです。
    >
    > App.configの「接続文字列」を変数に格納してVB.NETからSQLサーバーに接続しようと思い、
    > 次のようなコードを書きました。
    > ちなみにForm1の接続文字列TextBoxには
    > "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    > と入力してあります。
    >
    > Private Sub 実行Button_Click(sender As Object, e As EventArgs) Handles 実行Button.Click
    >
    > Dim cn As New SqlClient.SqlConnection
    > Dim cd As New SqlClient.SqlCommand
    > Dim 接続文字列 As String
    >
    > 接続文字列 = Form1.接続文字列TextBox.Text
    > cn.ConnectionString = 接続文字列
    > cn.Open()
    >     cd.CommandType = CommandType.StoredProcedure
    > cd.CommandText = "ストアドプロシージャ名"
    > cd.Connection = cn
    > cd.ExecuteNonQuery()
    >     cd.Dispose()
    >     cn.Close()
    >     cn.Dispose()
    >
    > End Sub
    >
    > Visual StudioのApp.configタブは次のとおりです。
    >
    > 前略
    > <connectionStrings>
    > <add name="**********.My.MySettings.**********_SQLConnectionString"
    > connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    > providerName="System.Data.SqlClient" />
    > </connectionStrings>
    > 後略
    >
    > なお、変数を用いずにダイレクトに次のように記載すると正常に動きます。
    > cn.ConnectionString = "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    >
    > どこがいけないのでしょうか?
    > どなたかお願いします。
    >
    >

    補足です。
    エラーは cn.Open()の行で出ます。
    失礼しました。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93365  Re[2]: 「接続文字列」を変数に格納
□投稿者/ WebSurfer -(2019/12/08(Sun) 12:27:15)
    No93364 (たかし さん) に返信

    Settings ファイルに **********.My.MySettings.**********_SQLConnectionString という名前で
    格納してあるように見えますが、そうであれば以下のようにしてはいかが?

    cn.ConnectionString = Properties.Settings.Default.**********.My.MySettings.**********_SQLConnectionString
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93366  Re[3]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/08(Sun) 13:07:27)
    No93365 (WebSurfer さん) に返信
    > ■No93364 (たかし さん) に返信
    >
    > Settings ファイルに **********.My.MySettings.**********_SQLConnectionString という名前で
    > 格納してあるように見えますが、そうであれば以下のようにしてはいかが?
    >
    > cn.ConnectionString = Properties.Settings.Default.**********.My.MySettings.**********_SQLConnectionString

    WebSurfer さん、いつもお世話になっております。
    ご指示いただいたコードでうまく接続できました。
    しかしPropertiesのところでエラーが出ます。

    エラー BC30451 'Properties' は宣言されていません。アクセスできない保護レベルになっています。

    このエラーを出さないためにはどうしたら良いでしょうか?
    よろしくお願いいたします。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93367  Re[4]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/08(Sun) 13:33:28)
    No93366 (たかし さん) に返信
    > ■No93365 (WebSurfer さん) に返信
    >>■No93364 (たかし さん) に返信
    >>
    >>Settings ファイルに **********.My.MySettings.**********_SQLConnectionString という名前で
    >>格納してあるように見えますが、そうであれば以下のようにしてはいかが?
    >>
    >>cn.ConnectionString = Properties.Settings.Default.**********.My.MySettings.**********_SQLConnectionString
    > 
    > WebSurfer さん、いつもお世話になっております。
    > ご指示いただいたコードでうまく接続できました。
    > しかしPropertiesのところでエラーが出ます。
    > 
    > エラー	BC30451	'Properties' は宣言されていません。アクセスできない保護レベルになっています。
    > 
    > このエラーを出さないためにはどうしたら良いでしょうか?
    > よろしくお願いいたします。
    > 
    
    追記です。
    Properties.Settings.Default.**********.My.MySettings.**********_SQLConnectionString
    を変数に代入するとやはりcn.Open()の行でエラーが出ます。
    
    
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93368  Re[5]: 「接続文字列」を変数に格納
□投稿者/ WebSurfer -(2019/12/08(Sun) 15:13:39)
    No93367 (たかし さん) に返信

    すみません、C# と間違えてました。VB.NET は名前空間とクラス名が以下のように異なる
    ようです。(Settings.Designer.vb 参照)

    名前空間: Properties ⇒ My
    クラス名: Settings ⇒ MySettings

    従って、以下のようになるはずです。お試しください。

    誤: cn.ConnectionString = Properties.Settings.Default.**********.My.MySettings.**********_SQLConnectionString

    正: cn.ConnectionString = My.MySettings.Default.**********.My.MySettings.**********_SQLConnectionString

記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93369  Re[5]: 「接続文字列」を変数に格納
□投稿者/ WebSurfer -(2019/12/08(Sun) 15:28:07)
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93370  Re[6]: 「接続文字列」を変数に格納
□投稿者/ w1909 -(2019/12/08(Sun) 16:26:51)
    2019/12/08(Sun) 19:05:25 編集(投稿者)
    2019/12/08(Sun) 19:05:20 編集(投稿者)

    >ちなみにForm1の接続文字列TextBoxには
    >"Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"

    テキストボックスの値、最初と最後にダブルクォーテーションがあるんですか?

    念のため確認 変数の値ではなく、テキストボックスに入力してある値です。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93372  Re[7]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/08(Sun) 17:54:30)
    No93370 (w1909 さん) に返信
    > >ちなみにForm1の接続文字列TextBoxには
    > >"Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    >
    > テキストボックスの値、最初と最後にダブルクォーテーションがあるんですか?

    Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True
    "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"

    変数にはダブルクォーテーションあるなしの場合両方ともエラーとなります。

記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93381  Re[1]: 「接続文字列」を変数に格納
□投稿者/ KOZ -(2019/12/08(Sun) 21:50:57)
    2019/12/08(Sun) 22:00:04 編集(投稿者)

    No93362 (たかし さん) に返信
    > <connectionStrings>
    > <add name="**********.My.MySettings.**********_SQLConnectionString"
    > connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    > providerName="System.Data.SqlClient" />
    > </connectionStrings>

    System.Configuration を参照設定して

    Imports System.Data.Common
    Imports System.Configuration

    Const connectionName As String = "**********.My.MySettings.**********_SQLConnectionString"
    Dim config As ConnectionStringSettings =
    ConfigurationManager.ConnectionStrings(connectionName)

    としておいて

    Dim factory As DbProviderFactory = DbProviderFactories.GetFactory(config.ProviderName)
    Dim con As DbConnection = factory.CreateConnection()
    con.ConnectionString = config.ConnectionString
    con.Open()

    もしくは

    Dim cn As New SqlClient.SqlConnection
    cn.ConnectionString = config.ConnectionString
    cn.Open()

    でどうでしょうか。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93382  Re[2]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/09(Mon) 12:25:26)
    No93381 (KOZ さん) に返信
    > 2019/12/08(Sun) 22:00:04 編集(投稿者)
    >
    > ■No93362 (たかし さん) に返信
    >><connectionStrings>
    >> <add name="**********.My.MySettings.**********_SQLConnectionString"
    >> connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"
    >> providerName="System.Data.SqlClient" />
    >> </connectionStrings>
    >
    > System.Configuration を参照設定して
    >
    > Imports System.Data.Common
    > Imports System.Configuration
    >
    > Const connectionName As String = "**********.My.MySettings.**********_SQLConnectionString"
    > Dim config As ConnectionStringSettings =
    > ConfigurationManager.ConnectionStrings(connectionName)
    >
    > としておいて
    >
    > Dim factory As DbProviderFactory = DbProviderFactories.GetFactory(config.ProviderName)
    > Dim con As DbConnection = factory.CreateConnection()
    > con.ConnectionString = config.ConnectionString
    > con.Open()
    >
    > もしくは
    >
    > Dim cn As New SqlClient.SqlConnection
    > cn.ConnectionString = config.ConnectionString
    > cn.Open()
    >
    > でどうでしょうか。
    >

    質問の趣旨をこの辺でもう一度はっきりさせたいと思います。
    「接続文字列」を変数に格納するにはどうしたらよいか?
    その一点です。

    変数を用いずにダイレクトに次のように記載すると正常に動きます。
    cn.ConnectionString = "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"

    ところが、

    Dim 接続文字列 As String

    接続文字列 = Form1.接続文字列TextBox.Text
    cn.ConnectionString = 接続文字列

    というコードではエラーになる。
    これのどこが間違えているのか?
    そこが知りたいのです。
    ちなみにcn.Open()のエラーのメッセージは
    「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」
    というものです。

    その線でアドバイスが頂けるとありがたいです。

記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93384  Re[3]: 「接続文字列」を変数に格納
□投稿者/ Hongliang -(2019/12/09(Mon) 12:49:14)
    > ちなみにcn.Open()のエラーのメッセージは
    > 「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」
    > というものです。
    これが初めから提示されていれば寄り道は小さかったかもしれません。

    さて、このメッセージからは、
    ・ConnectionStringプロパティに値を設定できていない
    ・ConnectionStringプロパティに設定したのがNothingまたは空文字列だった
    のいずれかの可能性が想定されます。

    まず、
    cn.ConnectionString = 接続文字列
    の行にブレークポイントを置いて、そこでブレークするまで実行し、
    Visual Studioの「ローカル」ウィンドウにて、
    <接続文字列>変数に格納されている値を確認してみてください。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93390  Re[4]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/09(Mon) 17:57:58)
    No93384 (Hongliang さん) に返信
    >>ちなみにcn.Open()のエラーのメッセージは
    >>「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」
    >>というものです。
    > これが初めから提示されていれば寄り道は小さかったかもしれません。
    >
    > さて、このメッセージからは、
    > ・ConnectionStringプロパティに値を設定できていない
    > ・ConnectionStringプロパティに設定したのがNothingまたは空文字列だった
    > のいずれかの可能性が想定されます。
    >
    > まず、
    > cn.ConnectionString = 接続文字列
    > の行にブレークポイントを置いて、そこでブレークするまで実行し、
    > Visual Studioの「ローカル」ウィンドウにて、
    > <接続文字列>変数に格納されている値を確認してみてください。

    おっしゃるとおり「""」となっています。
    なぜなのでしょう?

記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93388  Re[3]: 「接続文字列」を変数に格納
□投稿者/ WebSurfer -(2019/12/09(Mon) 13:31:46)
    No93382 (たかし さん) に返信

    > Dim 接続文字列 As String
    >
    > 接続文字列 = Form1.接続文字列TextBox.Text
    > cn.ConnectionString = 接続文字列
    >
    > というコードではエラーになる。
    > これのどこが間違えているのか?
    > そこが知りたいのです。

    他にコードはないのですか? 「Form1.接続文字列TextBox.Text」に接続文字列を代入するコードはないの
    ですか?

    なければ、「cn.ConnectionString = 接続文字列」で接続未字列は代入できず、空になっているのでは?

    そんな基本のキで間違うことはないということなら失礼しました。でも、それなら「Form1.接続文字列TextBox.Text」
    に接続文字列をどのように代入しているのか書いてください。
    ですか?
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93389  Re[4]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/09(Mon) 17:47:23)
    No93388 (WebSurfer さん) に返信
    > ■No93382 (たかし さん) に返信
    >
    >>Dim 接続文字列 As String
    >>
    >> 接続文字列 = Form1.接続文字列TextBox.Text
    >> cn.ConnectionString = 接続文字列
    >>
    >>というコードではエラーになる。
    >>これのどこが間違えているのか?
    >>そこが知りたいのです。
    >
    > 他にコードはないのですか? 「Form1.接続文字列TextBox.Text」に接続文字列を代入するコードはないの
    > ですか?
    >
    > なければ、「cn.ConnectionString = 接続文字列」で接続未字列は代入できず、空になっているのでは?
    >
    > そんな基本のキで間違うことはないということなら失礼しました。でも、それなら「Form1.接続文字列TextBox.Text」
    > に接続文字列をどのように代入しているのか書いてください。
    > ですか?
    >

    #93372で書いたとおり

    Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True
    "Data Source=(local)\SQLEXPRESS;Initial Catalog=**********SQL;Integrated Security=True"

    の二通りで試しましたがいずれもエラーとなります。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93386  Re[3]: 「接続文字列」を変数に格納
□投稿者/ KOZ -(2019/12/09(Mon) 13:27:34)
    No93382 (たかし さん) に返信
    >         接続文字列 = Form1.接続文字列TextBox.Text
    
    デフォルトのインスタンスを使ってますが、理解して使ってらっしゃいますか?
    
    「My.Forms オブジェクト」
    https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/objects/my-forms-object
    
    実行Button と同一のフォームに 接続文字列TextBox があるなら
    
        接続文字列 = Me.接続文字列TextBox.Text
    
    でいいですし、違うフォームなら
    
        Dim 接続文字列 As String = String.Empty
        For Each f As Form In Application.OpenForms
            Dim f1 As Form1 = TryCast(f, Form1)
            If f1 IsNot Nothing Then
                接続文字列 = f1.接続文字列TextBox.Text
                If Not String.IsNullOrEmpty(接続文字列) Then
                    Exit For
                End If
            End If
        Next
    
    とインスタンスを検索したり、あらかじめ、実行Button_Click からアクセスできる範囲に
    Form1 のインスタンスを保持しておく必要があります。
    
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93391  Re[4]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/09(Mon) 18:09:34)
    No93386 (KOZ さん) に返信
    > ■No93382 (たかし さん) に返信
    >> 接続文字列 = Form1.接続文字列TextBox.Text
    >
    > デフォルトのインスタンスを使ってますが、理解して使ってらっしゃいますか?
    >
    > 「My.Forms オブジェクト」
    > https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/objects/my-forms-object
    >
    > 実行Button と同一のフォームに 接続文字列TextBox があるなら
    >
    > 接続文字列 = Me.接続文字列TextBox.Text
    >
    > でいいですし、違うフォームなら
    >
    > Dim 接続文字列 As String = String.Empty
    > For Each f As Form In Application.OpenForms
    > Dim f1 As Form1 = TryCast(f, Form1)
    > If f1 IsNot Nothing Then
    > 接続文字列 = f1.接続文字列TextBox.Text
    > If Not String.IsNullOrEmpty(接続文字列) Then
    > Exit For
    > End If
    > End If
    > Next
    >
    > とインスタンスを検索したり、あらかじめ、実行Button_Click からアクセスできる範囲に
    > Form1 のインスタンスを保持しておく必要があります。
    >

    ご提示いただいたコードで無事接続ができました!
    ありがとうございます。
記事No.93362 のレス /過去ログ161より / 関連記事表示
削除チェック/

■93392  Re[5]: 「接続文字列」を変数に格納
□投稿者/ たかし -(2019/12/09(Mon) 19:01:50)
    No93391 (たかし さん) に返信
    > ■No93386 (KOZ さん) に返信
    >>■No93382 (たかし さん) に返信
    > >> 接続文字列 = Form1.接続文字列TextBox.Text
    >>
    >>デフォルトのインスタンスを使ってますが、理解して使ってらっしゃいますか?
    >>
    >>「My.Forms オブジェクト」
    >>https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/objects/my-forms-object
    >>
    >>実行Button と同一のフォームに 接続文字列TextBox があるなら
    >>
    >> 接続文字列 = Me.接続文字列TextBox.Text
    >>
    >>でいいですし、違うフォームなら
    >>
    >> Dim 接続文字列 As String = String.Empty
    >> For Each f As Form In Application.OpenForms
    >> Dim f1 As Form1 = TryCast(f, Form1)
    >> If f1 IsNot Nothing Then
    >> 接続文字列 = f1.接続文字列TextBox.Text
    >> If Not String.IsNullOrEmpty(接続文字列) Then
    >> Exit For
    >> End If
    >> End If
    >> Next
    >>
    >>とインスタンスを検索したり、あらかじめ、実行Button_Click からアクセスできる範囲に
    >>Form1 のインスタンスを保持しておく必要があります。
    >>
    >
    > ご提示いただいたコードで無事接続ができました!
    > ありがとうございます。
    >

    解決済みです。
記事No.93362 のレス / END /過去ログ161より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -