2012-11-30 179 views
-1

嗨,大家好,我需要一些幫助,這個dataconduit。它由我的導師編寫,我們將其用於Web開發項目。我正嘗試將它用於Windows窗體應用程序以連接到數據庫,但出現以下錯誤:C#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

謝謝你們,但我終於設法讓它工作。 我不知道這是否是正確的方式來做到這一點,但你做了什麼是我已經公開clsDataConduit(){}方法 和此方法之前我已經修改了連接字符串添加我的數據庫的完整路徑如下所示: private string connectionString =(@「Data Source =。\ SQLEXPRESS; AttachDbFilename = C:\ Users ... \ NamesData.mdf; Integrated Security = True; Connect Timeout = 30; User Instance = True」); – Lax

回答

0

謝謝你們,但我終於設法使它工作。我不知道這是否正確的做法,但你做了什麼是我已經公開clsDataConduit(){}方法,並在此方法之前,我已修改連接字符串添加我的數據庫的完整路徑如下:private string connectionString =(@「Data Source =。\ SQLEXPRESS; AttachDbFilename = C:\ Users ... \ NamesData.mdf; Integrated Security = True; Connect Timeout = 30; User Instance = True」);