- PR -

データベースログイン失敗

1
投稿者投稿内容
eno
常連さん
会議室デビュー日: 2008/08/22
投稿数: 28
お住まい・勤務地: 代々木上原
投稿日時: 2008-09-02 14:55
[Microsoft.SqlServer.Server.SqlProcedure]
private void button1_Click(object sender, EventArgs e)
{

// 接続文字列を生成する
string stConnectionString = string.Empty;
stConnectionString += "Data Source = localhost;";
  stConnectionString += "Initial Catalog = localhost;";
stConnectionString += "Integrated Security = false;";

try
{
// SqlConnection の新しいインスタンスを生成する (接続文字列を指定)
System.Data.SqlClient.SqlConnection cSqlConnection = (
new System.Data.SqlClient.SqlConnection(stConnectionString)
);

// データベース接続を開く
cSqlConnection.Open();//ここでSystem.Data.Sqlclientクラスが例外メッセージを吐き出しています。データベースのログイン前のハンドシェイク中にエラーが発生したとありますが、解決方法教えてください。DBには接続できているのは、理解しています。


// 接続に成功した旨を表示する
MessageBox.Show("Microsoft SQL Server に接続されました");

// データベース接続を閉じる (正しくは オブジェクトの破棄を保証する を参照)
cSqlConnection.Close();
cSqlConnection.Dispose();
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString()); }




}
eno
常連さん
会議室デビュー日: 2008/08/22
投稿数: 28
お住まい・勤務地: 代々木上原
投稿日時: 2008-09-02 15:09
stConnectionString += "Data Source = 127.0.0.1;";などと自ホストのIPアドレスを設定すると接続先SQLserverが暗号化をサポートしていないというエラーに切り替わるので、(System.Data.SqlClient.SqlException)

以下のようにSqlConnection.ConnectionStringを変更したのですが、
だめでした。。

// 接続文字列を生成する
string stConnectionString = string.Empty;
stConnectionString += "Data Source = 127.0.0.1;";
stConnectionString += "TrustServerCertificate = true;";
stConnectionString += "Initial Catalog = localhost;";
stConnectionString += "Encrypt = true;";
stConnectionString += "Integrated Security = true;";
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-09-03 21:44
 他のスレッドに関連したところだけ。


 慣れていないうちは、リファレンスを参照しながら使いましょう。
引用:

SqlConnection.Close メソッド<microsoft.com>より:
データベースへの接続を閉じます。このメソッドは、開いている接続を閉じるための最も好ましいメソッドです。

SqlConnection は、適用範囲外では閉じられません。そのため、Close または Dispose を呼び出して、明示的に接続を閉じる必要があります。Close と Dispose の機能は同じです。


 複数回呼び出してもかまわないように設計されていますが、だからといって呼び出す必要はありません。Close 1回で十分です。
# 明示実装で Dispose を隠していないマイクロソフトが悪い、とも言える。

 また、次のように書くこともできます。
コード:
using (SqlConnection cSqlConnection = new SqlConnection(stConnectionString)) {
    cSqlConnection.Open();
    MessageBox.Show("Microsoft SQL Server に接続されました");
}


このコードは、次のコードと等価です。
コード:
{
    SqlConnection cSqlConnection = new SqlConnection(stConnectionString);
    try {
        cSqlConnection.Open();
        MessageBox.Show("Microsoft SQL Server に接続されました");
    } finally {
        ((IDisposable) cSqlConnection).Dispose();
    }
}


 Dispose メソッド呼び出しが、finally ブロックにあることに注目してください。ご提示のコードでは、MessageBox.Show メソッド近辺で例外が生成されたとき、cSqlConnection.Close メソッドは実行されません。


本題を少し。
引用:

ここでSystem.Data.Sqlclientクラスが例外メッセージを吐き出しています。データベースのログイン前のハンドシェイク中にエラーが発生したとありますが、解決方法教えてください。


 こういう場合、例外の型と、少なくとも Message プロパティの内容は、一字一句間違いないようにコピーしてください。
引用:

stConnectionString += "Encrypt = true;";


false では?
1

スキルアップ/キャリアアップ(JOB@IT)