• 締切済み

C#でのSQLへのアクセスについて

SQL Serverのテーブルをコンソール上に表示する為のコードを書いたのですが SqlConnection SqlCommand SqlDataReader に対してエラーが出しまい、修正方法が分からず、どなたか教えて頂けないでしょうか? 【ソースコード】 using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using Microsoft.Data.SqlClient; static void Main(string[] args) { string connectionString = "Data Source=○○;Initial Catalog=○○;User ID=○○;Password=○○;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand("SELECT * FROM [○○]", connection)) using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader["column1"]); Console.WriteLine(reader["column2"]); } } } }

みんなの回答

回答No.3

usingによる参照が足りない場合は、using System.Data.SqlClient;を追加することで解決できるかもしれません。

  • dell_OK
  • ベストアンサー率13% (740/5643)
回答No.2

コードを試してみました。 SqlClientがふたつあるため、以下のようなエラーになりました。 ---- 'Microsoft.Data.SqlClient.SqlConnection' と 'System.Data.SqlClient.SqlConnection' 間のあいまいな参照です ---- 以下のどちらかを削除してみてください。 using System.Data.SqlClient; using Microsoft.Data.SqlClient; 私の環境では、Microsoft.Data.SqlClientを使うとエラーになってしまいました。 ---- 信頼されていない機関によって証明書チェーンが発行されました。 ---- System.Data.SqlClientを使うと問題なく接続され、データも取得できて、表示もされました。 試したのは、.NET Framework 4.7.2なので他のフレームワークをお使いでしたら、私とは違った結果になるかと思います。

  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

どのようにエラーが出ているかわかりませんが、Connectionが成功していなければその後は全てエラーになってしまいます。 SqlConnectionでSQLServerに背尽くするときのデータソースやサービス、ログインIDやパスワードを再度確認してください。 SMSSで接続できれば、接続に必要な情報を参照できるはずです。

関連するQ&A

  • VC++でSELECT文の実行結果を表示

    開発環境は OS XPのHomeEditon Visual C++ ExpressEdition SQL Server 2005 Express です。 よろしくお願いします。 #include "stdafx.h" #include <stdio.h> #include <windows.h> #include <string> using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; char a; void sub( SqlDataReader ^objRd ) { System::Diagnostics::Debug::WriteLine(objRd); while( objRd->Read() ) { System::Diagnostics::Debug::WriteLine(objRd->Read()); } } int main(void){ String^ str; SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\TEST.mdf;Integrated Security=True;User Instance=True"); sqlConn->Open(); str = "SELECT * FROM table1"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn); SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); sub( exeReader ); sqlConn->Close(); } これの実行結果がboolean形で帰ってくるのですがこれを表内のデータが帰ってくるようにしたいのです。 少し知識不足なところもありますがどうかよろしくお願いします。

  • C#でOracleに接続

    C#(2005)で作成したモジュールからOracle(10g)に接続する方法について質問です。 C# using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Configuration; using System.Collections; using System.Data.SqlClient; namespace ConsoleApplication1 { class Program { static void Main(string[] args) {    SqlConnection sqlcon = new SqlConnection("server=HOST名;database=ORA;user id=admin;password=admin"); SqlCommand sqlcmd = new SqlCommand("SELECT * FROM Table", sqlcon); sqlcon.Open();   ’ここでエラー’ SqlDataReader sqldr = sqlcmd.ExecuteReader(); while(sqldr.Read()){ Console.WriteLine((string)sqldr["ID"]); } sqldr.Close(); sqlcon.Close(); } } } エラー表示 SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした) 対処済み *「SQL+から「admin」「admin」「ORA」で接続確認。 *pingでホスト名 *C#よりデーターソースでのDBの接続 *SQLserverのセキュリティをリモート接続Ok->再起動済

  • SQLとC#connectについて

    独学で勉強しているのですがさっぱり分かりません...。 C# visual studio へ SQL server情報を読み込みたいのですが...Button1を押したら、sql に作成してある(ingredientという) データをrichtextbox へ送りたいです。 今のところ、SQLにcommandを送り、開き、リーダーで呼びました。 SqlConnection sc = new SqlConnection(@"........."); SqlCommand cmd; cmd = new SqlCommand ("Select * from ingredients", sc); sc.Open(); SqlDataReader reader = cmd.ExecuteReader(); その後作っておいたクラスでリストを作りストアしました。ingredientにはidとnameだけです。 List<Ingredient> ingredients = new List<Ingredient>(); while (reader.Read()) {  string testID = reader["id"].ToString(); string ingName = reader["name"].ToString(); Ingredient oneIng = new Ingredient(Convert.ToInt32(testID), ingName); ingredients.Add(oneIng);} 今リストの中に情報が入っているということは分ります。でも、これをrichtextboxにどう整理して入れるのかは分りません。教えて下さい!!!

  • ASP.NET OleDbConnectionが定義がされていません

    ACCESS2003 で 以下のサンプルを実行すると OleDbConnectionが定義がされていません。 というエラーが発生していて対処方法をしらべ てもわかりませんでした。 何方かご教授ください。よろしくお願いいたします。 Public Sub InsertRow(ByVal connectionString As String, _ ByVal insertSQL As String) Using connection As New OleDbConnection(connectionString) Dim command As New OleDbCommand(insertSQL) command.Connection = connection Try connection.Open() command.ExecuteNonQuery() Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Sub 以下のOleDbConnectionオブジェクトの作成は行いました。 http://www.atmarkit.co.jp/fdotnet/aspexp/aspexp03/aspexp03_01.html

  • VB.NETでSqlClientを利用して複数テーベルを見る方法

    今VB.NETで SQLデータベースからデータを取得して動作するプログラムを作っているのですが、テーブルを複数参照する方法がわかりません。教えてください~ ■今のプログラム(おおざっぱに) Public DBcn As SqlClient.SqlConnection = Nothing Public SQLcmd As SqlClient.SqlCommand Dim dr As SqlDataReader DBcn = New SqlClient.SqlConnection SQLcmd = New SqlClient.SqlCommand DBcn.ConnectionString = "接続情報省略" DBcn.Open() SQLcmd.Connection = DBcn SQLcmd.CommandText = "select * from AAA " dr = SQLcmd.ExecuteReader() While dr.Read() = True   ※処理A End While このプログラムの処理Aの中に もう一度Select文で他のテーブル(データベース同じ)を参照したいのですが、どのようにすればよいのでしょうか? いろいろ試してみたのですがどれもできず;;困っております。

  • C#で異なる環境のテーブル名をSQL上で指定したい

    お世話になります。 SQLSERVERとOracle上で共通して持っているIDを基にOracleのテーブルに保持している データをSQLSEVERで取得したいと思っています。 (1)SQLSERVERのテーブルA ID NAME ------------------ 111 NULL 222 NULL 333 NULL (2)OracleのテーブルB ID NAME ------------------ 111 情報1 222 情報2 333 情報3 444 情報4 (1)に存在しているIDでそのIDに紐づくNAMEを(2)より取得したいと思ってます。…(3) (3)SQLSERVERのテーブルC ※(1)とインスタンス・データベース名は同じ ID NAME ------------------ 111 情報1 222 情報2 333 情報3 上記の処理をC#で実現しようとした時に --------------------------------------------------------------------------------- // 接続文字列を生成する string stConnectionString = string.Empty; stConnectionString += "Data Source = local;"; stConnectionString += "Initial Catalog = master;"; stConnectionString += "Integrated Security = SSPI;"; stConnectionString += "MultipleActiveResultSets=true"; // SqlConnection の新しいインスタンスを生成する (接続文字列を指定) System.Data.SqlClient.SqlConnection cSqlConnection = ( new System.Data.SqlClient.SqlConnection(stConnectionString) ); // データベース接続を開く cSqlConnection.Open(); // cSqlConnection から SqlCommand のインスタンスを生成する System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand(); System.Data.SqlClient.SqlCommand aCommand = cSqlConnection.CreateCommand(); // 実行する SQL コマンドを設定する hCommand.CommandText = "SELECT ID FROM テーブルA "; // 指定した SQL コマンドを実行して SqlDataReader を構築する System.Data.SqlClient.SqlDataReader hReader = hCommand.ExecuteReader(); // hCommand を破棄する (正しくは オブジェクトの破棄を保証する を参照) hCommand.Dispose(); while (hReader.Read()) { aCommand.CommandText = "insert into テーブルC select * from テーブルB where id = " + "'" + hReader["ID"].ToString() + "'"; int iResult = aCommand.ExecuteNonQuery(); MessageBox.Show(iResult + "行返しました"); } //aCommandを破棄する。 aCommand.Dispose(); //hReaderを閉じる hReader.Close(); cSqlConnection.Close(); cSqlConnection.Dispose(); --------------------------------------------------------------------------------- で実現したいと思っていますが、INSERT INTO ~SELECT文で指定しているテーブルBはOracle上にあるため、以下のようにOarcleへのコネクションを張る必要があると考えています。 //Oracleの接続情報(Oracle.DataAccess.dll・using Oracle.DataAccess.Client;を事前に追加) OracleConnection conn = new OracleConnection(); conn.ConnectionString = "User Id=scott;Password=tiger;Data Source=orcl;"; OracleCommand cmd = conn.CreateCommand(); conn.Open(); ~ ここで質問ですが、上記のOracleへのコネクションを張った場合、 C#内で指定しているテーブルBをどのように記述すれば(3)の処理結果を実現できるでしょうか? ご教授よろしくお願い致します。

  • エクセルからSQLの接続の仕方

    エクセルを使ってMSSQLに接続したいのですが、エラーがでて接続できません。 なぜでしょうか? [エラー内容] コンパイルエラー: ユーザー定義型は定義されれいません。 コードの下の部分で発生します。 Dim Cn As New System.Data.SqlClient.SqlConnection [コード] Private Sub CommandButton1_Click() Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As System.Data.SqlClient.SqlCommand Dim ServerName As String Dim UserID As String Dim Password As String Dim DatabaseName As String ServerName = "TEST-PC" 'サーバー名(またはIPアドレス) UserID = "sa" 'ユーザーID Password = "password" 'パスワード DatabaseName = "TEST_DB_20140801" 'データベース St = "Server=" & ServerName & ";" & "User ID=" & UserID & ";" & "Password=" & Password & ";" & "Initial Catalog=" & DatabaseName Cn.ConnectionString = St SQL = Cn.CreateCommand SQL.CommandText = "SELECT * FROM LOG_DATA_XLINE" Cn.Open MsgBox (SQL.ExecuteScalar) Cn.Close SQL.Dispose Cn.Dispose End Sub

  • 共通モジュールでDBへの接続と利用方法

    VB.net のモジュールの引数にについての質問です。 やりたい事はSQLServerへの接続およびSELCT文を実行させることです DB側へのセッションをモジュールで作成し、 それを元に、他のモジュールやクラスファイルで selectやinsertを動かしたいと思っていますが、うまくいきません 「ExecuteReader には接続が開かれていて使用可能なことが必要です。 現在の接続の状態は終了です」というエラーが出てしまいます。 おそらく戻り値のあたりがおかしいのかなと思うのですが、 解決策がわかりません。 Module Connect Dim cn As System.Data.SqlClient.SqlConnection Public Function Connection() Try cn = New System.Data.SqlClient.SqlConnection() 'SQL Server認証を利用して接続 cn.ConnectionString = _ "Data Source = " & ServerName & _ ";Initial Catalog = " & DBName & _ ";User ID = " & UserID & _ ";Password = " & password 'Windows認証を利用して接続 'cn.ConnectionString = _ ' "Data Source = " & ServerName & _ ' ";Initial Catalog = " & DBName & _ ' ";Integrated Security = SSPI" cn.Open() MessageBox.Show("接続されました") Catch ex As Exception MessageBox.Show(ex.ToString) End Try Return cn End Function End Module Public Sub ExecuteReaderTest() Try Dim cn As New System.Data.SqlClient.SqlConnection Connection() Dim hCommand As System.Data.SqlClient.SqlCommand = cn.CreateCommand() hCommand.CommandText = "SELECT ~~ " Dim cReader As System.Data.SqlClient.SqlDataReader = hCommand.ExecuteReader() hCommand.Dispose() ......

  • VC++でSQLへSELECT文を送ったのですが…

    #include "stdafx.h" #include <stdio.h> #include <windows.h> #include <string> using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; char a; int main(void) { String^ str; SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\○○\\test.mdf;Integrated Security=True;User Instance=True"); sqlConn->Open(); str = "Select test FROM Table1"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);// SqlDataReader^ ExecuteReader (); sqlConn->Close(); } int sub() { a = ExecuteReader; printf (a,"表示テスト\n"); return 0; } の構文でSQL ServerへSELECT文を送り、そこで得た結果を 表示しようと思ったのですが 1>select-test.cpp 1>.\select-test.cpp(28) : error C2065: 'ExecuteReader' : 定義されていない識別子です。 1>.\select-test.cpp(29) : error C2664: 'printf' : 1 番目の引数を 'char' から 'const char *' に変換できません。 (新しい機能 ; ヘルプを参照) 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは 関数スタイル キャストが必要です。 と2つのエラーを返されてしまいました。 開発環境は OS XPのHomeEditon Visual C++ ExpressEdition SQL Server 2005 Express です。 よろしくお願いします。

  • VB.NETからのMDBへのデータ接続について教えてください。

    またまたお世話になります。 いろいろ教えていただきながらほとんど出来上がって今最後のログオン部分を作成中です。 VB.NET2003、アクセス2000使用です。 参考にしている本がAccess使いではなくMSDEを使用しているため、データ接続の部分が毎回違っています。 各フォームなどでは余り気にせずに進めたのですが、このログオン処理のところだけ引っかかって進むことが出来ません。 データリンクプロパティでAccessの場合はMicrosoft Jet4.0 OLE DB Providerを指定しなければならないようですが、この場合、Oledbconnectionが作成されます。 MSDEの場合、Sqlconnectionが作成されSQLは以下のように書かれます。 Dim cmd As Sqlclient.Sqlcommand = Sqlconnection1.CreateCommnad() Dim dr As SqlClient.SqlDataReader 'コマンドのコネクション設定 cmd.Connection = SqlConnection1 'コネクションを開く SqlConnection1.Open() OledbConnectionを使って書くにはどういう修正をしたらいいのか、ご教示いただきたくお願いします。

専門家に質問してみよう