C# SQLServer 接続テストで問題が発生:原因と対処法は?

このQ&Aのポイント
  • C#でSQLServerの接続テストを行っていますが、うまく繋がりません。システムデータベースの設定やデータベースの状態を確認する必要があります。
  • 接続先のデータベースが正しいかどうかを確認してください。SampleWebAppDBが正しく作成されているかを確認し、適切な接続文字列を使用していますか?
  • 問題の原因は、SampleWebAppDBの作成時に何かしらのミスがあった可能性があります。データベースの作成方法や接続文字列の設定を再確認してください。
回答を見る
  • ベストアンサー

C# SQLServer 初級者

こんにちわ C#でSQLServerの接続テストをやっているものですが、うまく繋がりません。 SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = @"●●●-PC\SQLEXPRESS"; builder.InitialCatalog = "SampleWebAppDB"; builder.IntegratedSecurity = true; builder.UserInstance = true; builder.MultipleActiveResultSets = true; SqlConnection conn = new SqlConnection(); conn.ConnectionString = builder.ConnectionString; conn.Open(); というようなソースになっています。 試しにシステムデータベースのmasterでしょうか builder.InitialCatalog = "SampleWebAppDB";を builder.InitialCatalog = "master";にして実行すると通ります。 システムデータベースというのがよくわかっておりませんが、SQLServer用のDBのようですが、これに繋がるということはbuilder.DataSourceの設定はいけてる感じがいたします。 考えられるのは新規で作成したSampleWebAppDBがどっかおかしいと思われますが、考えられる原因は何でしょうか? ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

接続しているユーザー名(以下の説明でアカウントと呼称しているもの)とパスワードは何でしょうか。 Microsoft SQL Serverのユーザー管理は少し変わっており、SQL Serverに対するログイン(これを以後アカウントと呼称します)と各データベース内のユーザー(これを以後DBユーザーと呼称します)が別々に管理されており、アカウントとDBユーザーをマッピングする事で各データベースへのアクセス制御を行っています。 今回の話とは直接関係ありませんが、このアカウントなるものの扱いはインストール時の設定に関わってきます。「Windows認証モード」ではアカウントはこのMicrosoft SQL Serverが稼動しているWindowsのOSユーザーとなり(これをWindows認証と言います)、「混合モード」ではWindowsのOSユーザーの他に「sa」などのMicrosoft SQL Server内にのみ存在するアカウント(これをSQL Server認証と言います)も使う事ができるようになります。SQL Server認証でのみ運用するという事はできないようです。 この回答でアカウントと呼称していますが、Microsoftはこれをログインと呼称しているようです。この回答ではログインという言葉をC#で作ったプログラムがMicrosoft SQL Serverにアクセスする動作(動詞)と定義し、Microsoftで言うログインを便宜上アカウントと呼称しています。 例えばsaというアカウントがありますが、これはインストール時にmasterデータベースにおいてdboというDBユーザーにマッピングされます。そして、CREATE DATABASEでデータベースを作成すると、作成した時のアカウントが該当データベースのdboというDBユーザーにマッピングされます。 ですので、masterには繋がるけどSampleWebAppDBには繋がらないという場合は、該当のアカウントがSampleWebAppDBのDBユーザーとマッピングされていない、またはマッピングされているDBユーザーに読み書き権限が無い、という事が考えられます。

yaruoHatoyama
質問者

お礼

ありがとうございました

関連するQ&A

  • VB.NetでSQLServer2005に接続できません。教えてください。

    はじめまして。初めて投稿します。 かなり困っているので、誰か助けてください。 内容はVB.Net2003を使用して、SQLServer2005に接続するときに 「SSPI コンテキストを生成できません」のエラーが発生してしまいます。 SQLServer2005をインストールしているのがサーバーではなく クライアント(プログラムを実行している端末)なので、 それが原因だと思うのですが、どうしてもその環境でしなくてはいけないので 何かご存知の方がおられるのなら、ご教示お願いします。 ソースは以下のとおりです。 ↓ Dim Scn As SqlClient.SqlConnection = New SqlClient.SqlConnection '接続文字列セット Scn.ConnectionString = _ "Server=""(local)"";Integrated Security=SSPI;database=" & データベース名 'dbオープン Scn.Open() ←このタイミングでエラーが発生

  • VS2010 VB SQLServer2008

    VS2010のVBでSQLServer2008に接続するプログラムを作成しています。 メインDBはWinXPになります。 WinXPのDBに接続しようとしている端末はWin7です。 LOCALならばSQLServerに接続し、作成、更新、削除が可能です。 LOCALのVBのプログラムの記述は問題ないかと思います。 しかし、Win7からWinXPのSQLServerのDBを接続したいのですが、エラーになってしまします。 エラー内容:ユーザー"ユーザー名"はログイン出来ませんでした。 テスト的にWin7の「SQL Server Management Studio」を起動して接続するとWinXPのDBは参照する事が出来ますので接続する環境は問題ないと思っています。 VBのプログラムから接続ができませんので、プログラムの問題なのでしょうか。 <VBの記述>   Imports System.Xml Public gCn1 As New SqlClient.SqlConnection() Private Const mstrDataSource As String = "Data Source = User\SQLEXPRESS,1433;" Private Const mstrSecurity As String = "Integrated Security = false;" Private Const mstrCatalog As String = "Initial Catalog = " & "TestTable;" Private Const mstrUser As String = "User ID = " & "User;" Private Const mstrPass As String = "Password = " & "1234;" '--- Public Function Proc_DBConnect1() Try gCn1 = New System.Data.SqlClient.SqlConnection() gCn1.ConnectionString = mstrDataSource gCn1.ConnectionString &= mstrSecurity gCn1.ConnectionString &= mstrCatalog gCn1.ConnectionString &= mstrUser gCn1.ConnectionString &= mstrPass gCn1.Open()   <= ここでエラーとなる。 Catch ex As Exception MsgBox(Err.Description)  <= ここでエラーの内容が表示される GoTo ExitProc_DBConnect1 End Try ExitProc_DBConnect1: Exit Function End Function ご教授の程よろしくお願いします。

  • ASP.NETからのデータベースの作成

    こんにちは。 SQL SERVER 2005 ExpressとIIS5.0とASP.NET2.0+C#で使っています。 一台のサーバーマシンに、SQL SERVER 2005 ExpressとIIS5.0をインストールした状態なのですが、Webページ上のC#のプログラムよりデータベースを作成しようとすると、 CREATE DATABASE 権限がデータベース 'master' で拒否されました。 と、メッセージが出ます。 要するに権限がないというのはわかるのですが、このようにWebからログインしてきたユーザーに権限を付加することはできるのでしょうか? あるいは、接続文字列かなんかで権限のあるユーザーでログインする、といったことが可能なものでしょうか? 現在は以下のようにして接続、作成を行おうとしています。 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Server=.\\SQLEXPRESS;Integrated security=SSPI"; String strDatabase = "CREATE DATABASE newdatabase"; SqlCommand cmdDatabase = new SqlCommand(strDatabase, conn); conn.Open(); cmdDatabase.ExecuteNonQuery(); conn.Close(); エラーの内容から、SQL SERVERそのものへのアクセスは成功しているように思えます。 よろしくお願いします。

  • エクセルからSQLServerのデータを操作したいのですが

    エクセルからSQLServerのデータを操作したいのですが 下記コードをエクセルに入力して実行すると conn.Open connstrの部分にて 実行時エラー"-2147217887(80040e21)' 複数ステップの OLE DB の操作エラーが発生しました。各OLE DBの状態の値を確認してください。 作業は終了しませんでした。 とでてしまいます。 どのようにしたらいいのでしょうか? 教えてください。 Const connstr ="Data Source=●●●\SWLEXPRESS;Initial Catalog = DBweb;Integrated Security=True" は Web.configで接続されている <add name ="webConnectionString" connectionString="Data Source=●●●\SWLEXPRESS;Initial Catalog = DBweb;Integrated Security=True"_ providerName = "System.Data SqlClient"/>からproviderNameを抜かしてとったのですがいいのでしょうか? ------------------------------------------- Sub SQL() Const connstr ="Data Source=●●●\SWLEXPRESS;Initial Catalog = DBweb;Integrated Security=True" Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strSQL As String strSQL = "SELECT * FROM DBtable" conn.Open connstr rs.Open strSQL, conn Range("A2").CopyFromRecordset rs rs.Close conn.Close Set rs = Nothing Set conn = Nothing End Sub

  • SQLSERVERの接続方法を教えて下さい

    Visual Studio C# Windows CE環境でSQLSERVERに接続する方法を教えて頂きたいです。 System.Data.SqlClient.SqlConnection cSqlConnection = new System.Data.SqlClient.SqlConnection("接続文字列"); cSqlConnection.Open(); とすると実行時にエラーになります。

  • sqlserverに現在時刻を格納したいのですが、『':'付近に不適切

    sqlserverに現在時刻を格納したいのですが、『':'付近に不適切な構文があります。』 と出てしまい、格納されません。言語はVC#2008、データ型はtime(7),datetimeなど試しているのですがうまくいかないのです。orz 以下、コードです。 SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=F:\C#\MyDatabase.mdf; Integrated Security=true; Connect Timeout=30; User Instance=true"); DateTime dt = DateTime.Now; TimeSpan ts = dt.TimeOfDay; // 更新 int id = int.Parse(textBox2.Text); SqlCommand cmd = new SqlCommand( "UPDATE Product SET 時刻 = " + ts + " WHERE ID ='" +id.ToString()+"'", cn); cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); 原因判りますでしょうか・・・ よろしくお願いします。

  • SQLServer2000で登録情報を知りたいです。

    VB.NETとSQLServer2000でWebアプリをつくろうと思っています。 VB.NETとSQLServer2000の接続がよくわからないので教えてください。 ある書籍でVB.NETとSQLServer2000の接続文字列は下記のとおりだと書いてありました。 '接続文字列を作成して接続を開始する sqlCn.ConnectionString = "data source=Server;" "initial catalog=DB201;" "user id=db201;" "password=db201;" "persist security info=True;" sqlCn.Open() ここでの「data source」「initial catalog」「user id」「password」などの情報をインストール済みのSQLServerで調べたいのですが、どのようにするのでしょうか? 「data source」がもしサーバー名であれは、サービスマネジャーで実行されているサーバー名でよいのでしょうか? どうか教えてください。

  • SQLで同じDBに対し2つのコネクションをもてる?

    SQLServer2005ExpressEditionとVB.NETで、ひとつのDBに対して、コネクションを2つ持つことは可能ですか?または、問題などおこりませんか? 以下のような感じでやってみたところ、両方ともに接続はできましたが、何か問題をはらんでいないかお気づきの方いらっしゃいましたらご教示いただけると助かります。 ' 接続文字列を生成する Dim stConnectionString As String = "接続情報" ' SqlConnection の新しいインスタンスを生成する (接続文字列を指定) Dim cSqlConnection As New System.Data.SqlClient.SqlConnection(stConnectionString)   Dim cSqlConnection1 As New System.Data.SqlClient.SqlConnection(stConnectionString) ' データベース接続を開く cSqlConnection.Open() cSqlConnection1.Open() ' 実処理   ・   ・   ・ ' データベース接続を閉じる cSqlConnection.Close() cSqlConnection.Dispose() cSqlConnection1.Close() cSqlConnection1.Dispose()

  • SQLServer2008のDate型について

    SQLServer2008のDate型についてお聞きします Date型には日付のみセットされると思うのですが VB2010から接続表示すると時刻データまで表示されてしまいます テーブルデータの表示では「20120305」 VBでは「20120305 0:00:00」 となっております。 期待する動作はVBで「20120305」と表示されることです 接続はこの様にしております。 Dim cn As New SqlConnection(ConnectionString~) Dim cmd As New SqlCommand("SELECT * FROM Test1", cn) cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader While dr.Read() Trace.WriteLine(dr("Date").ToString) End While なぜ時刻までセットされてしまうのか理解できません。 ご指導よろしくお願い致します。

  • C#のSQL言語について教えてください。

    windowsフォーム上にデータベースのテーブルを載せて、 書き込むボタンを作り、その書き込み内容を書き込み直後にフォーム上のデータベースのテーブルに反映させたいと思っているのですが反映されません。コードが間違っていますでしょうか? これがソースです。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd = new SqlCommand("Select * From Product", cn); cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cmd.ExecuteNonQuery(); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd.Transaction = st; st.Commit(); cn.Close(); コミットはこれでいいのでしょうか? this.table1TableAdapter.Fill(this.database1DataSet.Table1); これを入れてもテーブルが更新されませんでした。

専門家に質問してみよう