2012-11-30 4 views
-1

안녕하세요,이 dataconduit에 대한 도움이 필요합니다. 나의 교사에 의해 쓰여졌 고 우리는 그것을 웹 개발 프로젝트에 사용했다. Windows Forms 응용 프로그램에서 데이터베이스에 연결하려고하지만 다음과 같은 오류가 발생합니다.C# Windows 폼 - Windows 양식 응용 프로그램에 연결하는 데이터 도관

C : \ Users .... 파일에 대해 자동 이름이 지정된 데이터베이스를 연결하지 못했습니다. 같은 이름의 데이터베이스가 있거나 지정된 파일을 열 수 없거나 UNC 공유에 있습니다.

데이터 도관은 실제로 asp.net 웹 사이트에서는 사용하지만 Windows 양식에서는 사용되지 않습니다. 나는 연구했지만 행운은 없었습니다. 난 그냥 두 개의 텍스트 상자를 테스트입니다 및 버튼
을 저장하면이 내 이름 클래스의 코드 당신

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.SqlClient; 
using System.Data.OleDb; 
using System.Data; 

///This class uses the ado.net sql classes to provide a connection to an sql server database. 
///it is free for use by anybody so long as you give credit to the original author i.e me 
///Matthew Dean [email protected] De Montfort University 2011 

//you will need to modify the name of the namespace to suit your own program. 
namespace MyClassLibrary 
{ 
    public class clsDataConduit 
    { 
     //connection object used to connect to the database 
     SqlConnection connectionToDB = new SqlConnection(); 
     //data adapter used to transfer data to and from the database 
     SqlDataAdapter dataChannel = new SqlDataAdapter(); 
     //ado.net class for building the sql commands 
     SqlCommandBuilder commandBuilder = new SqlCommandBuilder(); 
     //stores a list of all of the sql parameters 
     List<SqlParameter> SQLParams = new List<SqlParameter>(); 
     //data table used to store the results of the stored procedure 
     DataTable queryResults = new DataTable(); 
     //data row used to store the data for a new record 
     DataRow newRecord; 
     //string variable used to store the connection string 
     private string connectionString; 

     public clsDataConduit() 
     { 
      //this is the constructor for the class 
      //you will need to modify this to suit your own database name and folder structure 
      // 
      //variable to store the patth to the database 
      string DbPath; 
      //variable to store the partial path and file name of your database 
      //modify this line to suit your own needs 
      string DatabaseName = "\\MyDatabase\\NamesData.mdf"; 
      //set the DbPath concatenating the name of your database 
      DbPath = GetParentPath() + DatabaseName; 
      //build up the connection string for the sql server database 
      connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + DbPath + ";Integrated Security=True;User Instance=True"; 
     } 

     private string GetParentPath() 
     ///this function returns the path to the parent folder of the solution 
     { 
      //get the folder for the project 
      string DbPath = System.AppDomain.CurrentDomain.BaseDirectory; 
      //variable to store the position of the \\ characters 
      int Posn; 
      //loop through the path twice 
      for (int Counter = 0; Counter != 2; Counter++) 
      { 
       //find the right most instance of \\ 
       Posn = DbPath.LastIndexOf("\\"); 
       //split the path at that point 
       DbPath = DbPath.Substring(0, Posn); 
       //do it one more time 
      } 
      //return the new path 
      return DbPath; 
     } 

     public void AddParameter(string ParamName, string ParamValue) 
     ///public method allowing the addition of an sql parameter to the list of parameters 
     ///it accepts two parameters the name of the parameter and its value 
     { 
      //create a new instance of the sql parameter object 
      SqlParameter AParam = new SqlParameter(ParamName, ParamValue); 
      //add the parameter to the list 
      SQLParams.Add(AParam); 
     } 

     public void Execute(string SProcName) 
     { 
      ///public method used to execute the named stored procedure 
      ///accepts one parameter which is the name of the stored procedure to use 
      //open the stored procedure 
      //initialise the connection to the database 
      connectionToDB = new SqlConnection(connectionString); 
      //open the database 
      connectionToDB.Open(); 
      //initialise the command builder for this connection 
      SqlCommand dataCommand = new SqlCommand(SProcName, connectionToDB); 
      //add the parameters to the command builder 
      //loop through each parameter 
      for (int Counter = 0; Counter < SQLParams.Count; Counter += 1) 
      { 
       //add it to the command builder 
       dataCommand.Parameters.Add(SQLParams[Counter]); 
      } 
      //set the command type as stored procedure 
      dataCommand.CommandType = CommandType.StoredProcedure; 
      //initialise the data adapter 
      dataChannel = new SqlDataAdapter(SProcName, connectionToDB); 
      //set the select command property for the data adapter 
      dataChannel.SelectCommand = dataCommand; 
      //use the copmmand builder to generate the sql insert delete etc 
      commandBuilder = new SqlCommandBuilder(dataChannel); 
      //fill the data adapter 
      dataChannel.Fill(queryResults); 
      //get the structure of a single record 
      newRecord = queryResults.NewRow(); 
      //close the connection 
      connectionToDB.Close(); 
     } 

     public void WriteToDatabase() 
     //void method that updates changes to the data adapter thus changing the database 
     { 
      //update any changes 
      dataChannel.Update(queryResults); 
     } 

     public DataRow NewRecord 
     ///this method provides access to the new record as a single data row 
     { 
      get 
      { 
       //return the blank data row 
       return newRecord; 
      } 
     } 

     public void RemoveRecord(int Index) 
     //void method that removes a record at a specified index in the query results 
     { 
      //remove the record 
      queryResults.Rows[Index].Delete(); 
     } 

     public void AddToDataTable() 
     //void method that adds the new record to the table data 
     { 
      //add the new record to the table 
      queryResults.Rows.Add(newRecord); 
      //re initialise the new record 
      newRecord = queryResults.NewRow(); 
     } 

     public int Count 
     //property that returns the count of records in the query results 
     { 
      get 
      { 
       //return the count of the query results 
       return queryResults.Rows.Count; 
      } 
     } 

     public DataTable QueryResults 
     //public property that provides access to the query results 
     { 
      get 
      { 
       //return the query results 
       return queryResults; 
      } 
      set 
      { 
       //set the query results 
       queryResults = value; 
      } 
     } 
    } 
} 

감사합니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace MyClassLibrary 
{ 
    public class clsName 
    { 
     private string firstName; 
     private string lastName; 

     public string FirstName 
     { 
      get 
      { 
       return firstName; 
      } 

      set 
      { 
       firstName = value; 
      } 
     } 

     public string LastName 
     { 
      get 
      { 
       return lastName; 
      } 

      set 
      { 
       lastName = value; 
      } 
     } 

     public void Save() 
     { 
      clsDataConduit Names = new clsDataConduit(); 
      Names.Execute("sproc_tblNames_GetAll"); 
      Names.NewRecord["FirstName"] = firstName; 
      Names.NewRecord["LastName"] = lastName; 
      Names.AddToDataTable(); 
      Names.WriteToDatabase(); 
     } 




    } 
} 
+0

나는 너희들에게 감사하지만 마침내 그 일을 할 수 있었다. 그것이 올바른 방법인지는 모르지만 내가 한 일은 public clsDataConduit() {} 메서드 을 주석 처리했으며이 메서드를 사용하기 전에 데이터베이스의 전체 경로를 추가하는 연결 문자열을 수정했습니다. private string connectionString = (@ "데이터 원본 =. \ SQLEXPRESS; AttachDbFilename = C : \ Users ... \ NamesData.mdf; 통합 보안 = True, 연결 시간 초과 = 30, 사용자 인스턴스 = True"); – Lax

답변

0

여러분 께 감사 드려요. 나는 그것을 할 올바른 방법이 있는지 모르겠지만 무슨 짓을했는지 공개 clsDataConduit() {} 메서드를 주석 및이 메서드는 전에 내 데이터베이스의 전체 경로를 추가하는 연결 문자열을 수정 한 경우 : 개인 문자열 connectionString = (@ "데이터 원본 =. \ SQLEXPRESS, AttachDbFilename = C : \ Users ... \ NamesData.mdf, 통합 보안 = True, 연결 시간 초과 = 30, 사용자 인스턴스 = True");

관련 문제