Ajout de données au file SQL Server de Microsoft à l'aide de c #

J'ai ajouté un file SQL Server de Microsoft à mon projet et SqlCommand un SqlCommand pour insert mes données dans le file. J'utilise using System.Data.SqlClient; . Le code suivant est comment j'ajoute des données à mon file. Une fois mon programme terminé, je vais dans l'explorateur de données de mon projet et request à afficher datatables de HistQuote d' HistQuote et rien ne s'affiche. Quelqu'un pourrait-il me conseiller sur la façon dont je peux vérifier que mon instruction INSERT fonctionne?

 using (SqlConnection connection = new SqlConnection(Settings.Default.StorageConnectionSsortingng)) { connection.Open(); for (int intCurrentQuote = 0; intCurrentQuote < this.clbStockSelect.CheckedItems.Count; ++intCurrentQuote) { for (int intCurrentDate = 0; intCurrentDate < Quotes[intCurrentQuote].HistStockDate.Count; ++intCurrentDate) { ssortingng strInsert = "INSERT INTO [HistQuote] "; ssortingng strColumns = "(Symbol, [Date], [Open], High, Low, Volume, Adj_Close, [Close]) "; ssortingng strValues = "VALUES (@Symbol, @Date, @Open, @High, @Low, @Volume, @Adj_Close, @Close)"; using (SqlCommand sqlCommand = new SqlCommand(strInsert + strColumns + strValues, connection)) { sqlCommand.Parameters.Clear(); sqlCommand.Parameters.Add(new SqlParameter("@Symbol", SqlDbType.NChar)); sqlCommand.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime)); sqlCommand.Parameters.Add(new SqlParameter("@Open", SqlDbType.Real)); sqlCommand.Parameters.Add(new SqlParameter("@High", SqlDbType.Real)); sqlCommand.Parameters.Add(new SqlParameter("@Low", SqlDbType.Real)); sqlCommand.Parameters.Add(new SqlParameter("@Close", SqlDbType.Real)); sqlCommand.Parameters.Add(new SqlParameter("@Volume", SqlDbType.Real)); sqlCommand.Parameters.Add(new SqlParameter("@Adj_Close", SqlDbType.Real)); sqlCommand.Parameters["@Symbol"].Size = 10; sqlCommand.Prepare(); sqlCommand.Parameters["@Symbol"].Value = this.Quotes[intCurrentQuote].HistSymbol; sqlCommand.Parameters["@Date"].Value = this.Quotes[intCurrentQuote].HistStockDate[intCurrentDate]; sqlCommand.Parameters["@Open"].Value = this.Quotes[intCurrentQuote].HistOpen[intCurrentDate]; sqlCommand.Parameters["@High"].Value = this.Quotes[intCurrentQuote].HistHigh[intCurrentDate]; sqlCommand.Parameters["@Low"].Value = this.Quotes[intCurrentQuote].HistLow[intCurrentDate]; sqlCommand.Parameters["@Close"].Value = this.Quotes[intCurrentQuote].HistClose[intCurrentDate]; sqlCommand.Parameters["@Volume"].Value = this.Quotes[intCurrentQuote].HistVolume[intCurrentDate]; sqlCommand.Parameters["@Adj_Close"].Value = this.Quotes[intCurrentQuote].HistAdjClose[intCurrentDate]; sqlCommand.ExecuteNonQuery(); sqlCommand.Parameters.Clear(); } } } connection.Close(); } 

L'approche User Instance et AttachDbFileName = entière est imparfaite – au mieux! Lorsque vous exécutez votre application dans Visual Studio, elle va copyr le file .mdf (de votre directory App_Data vers le directory de sortie – généralement .\bin\debug – où votre application s'exécute) et très probablement , votre INSERT fonctionne très bien – mais vous regardez juste le mauvais file .mdf à la fin!

Si vous voulez myConnection.Close() cette approche, essayez de mettre un point d'arrêt sur l'appel myConnection.Close() – puis inspectez le file .mdf avec SQL Server Mgmt Studio Express – Je suis presque certain que vos données sont là.

La vraie solution à mon avis serait de

  1. installez SQL Server Express (et vous l'avez déjà fait de toute façon)

  2. installer SQL Server Management Studio Express

  3. créez votre database dans SSMS Express , donnez-lui un nom logique (par exemple Storage )

  4. connectez-vous en utilisant son nom de database logique (donné lorsque vous le créez sur le server) – et ne vous mêlez pas des files de database physiques et des instances d'users. Dans ce cas, votre string de connection serait quelque chose comme:

     Data Source=.\\SQLEXPRESS;Database=Storage;Integrated Security=True 

    et tout le rest est exactement le même qu'avant …

Voir aussi l'excellent article de Aaron Bertrand Bad mauvaises habitudes: utiliser AttachDbFileName pour plus d'informations.

Est-ce que quelque chose comme ça pourrait fonctionner?

 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Dataread { class Program { static void Main(ssortingng[] args) { using (SqlConnection connection = new SqlConnection(Settings.Default.StorageConnectionSsortingng)) { connection.Open(); ssortingng strCmd = "Select * from [HistQuote]"; using (SqlCommand sqlCommand = new SqlCommand(strCmd, connection)) { var rdr = new SqlDataReader(); rdr = sqlCommand.ExecuteReader(); while(rdr.Read()) { Console.WriteLine(rdr["Symbol"].ToSsortingng() + rdr["Date"].ToSsortingng() + rdr["Open"].ToSsortingng() + rdr["High"].ToSsortingng() + rdr["Low"].ToSsortingng() + rdr["Volume"].ToSsortingng() + rdr["Adj_Close"].ToSsortingng() + rdr["Close"].ToSsortingng()); } } connection.Close(); } } } }