Добавление данных в файл Microsoft SQL Server с помощью C#
Я добавил файл Microsoft SQL Server в свой проект, и я запускаю SqlCommand
вставить мои данные в файл. я using System.Data.SqlClient;
, Следующий код показывает, как я добавляю данные в мой файл. После того, как моя программа закончила работать, я захожу в Data Explorer в моем проекте и прошу показать Table Data of HistQuote
и ничего не появляется Может ли кто-нибудь совет, как я могу проверить, что мой INSERT
Заявление работает.
using (SqlConnection connection = new SqlConnection(Settings.Default.StorageConnectionString))
{
connection.Open();
for (int intCurrentQuote = 0; intCurrentQuote < this.clbStockSelect.CheckedItems.Count; ++intCurrentQuote)
{
for (int intCurrentDate = 0; intCurrentDate < Quotes[intCurrentQuote].HistStockDate.Count; ++intCurrentDate)
{
string strInsert = "INSERT INTO [HistQuote] ";
string strColumns = "(Symbol, [Date], [Open], High, Low, Volume, Adj_Close, [Close]) ";
string 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();
}
2 ответа
Весь пользовательский экземпляр и метод AttachDbFileName= имеют недостатки - в лучшем случае! При запуске приложения в Visual Studio оно будет копироваться по всему .mdf
файл (из вашего App_Data
каталог в выходной каталог - обычно .\bin\debug
- где работает ваше приложение) и, скорее всего, ваше INSERT
работает просто отлично - но в итоге вы смотрите не тот файл.mdf!
Если вы хотите придерживаться этого подхода, попробуйте установить точку останова на myConnection.Close()
позвоните - а затем осмотрите .mdf
файл с SQL Server Mgmt Studio Express - я почти уверен, что ваши данные там.
На мой взгляд, реальным решением было бы
установить SQL Server Express (и вы уже сделали это в любом случае)
установить SQL Server Management Studio Express
создайте свою базу данных в SSMS Express, дайте ей логическое имя (например,
Storage
)подключитесь к нему, используя его логическое имя базы данных (заданное при его создании на сервере), и не связывайтесь с физическими файлами базы данных и пользовательскими экземплярами. В этом случае ваша строка подключения будет выглядеть примерно так:
Data Source=.\\SQLEXPRESS;Database=Storage;Integrated Security=True
а все остальное точно так же, как и раньше...
Также см. Отличный пост в блоге Аарона Бертранда. Плохие привычки: использовать AttachDbFileName для получения дополнительной информации.
Может ли что-то подобное сработать?
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(string[] args)
{
using (SqlConnection connection = new SqlConnection(Settings.Default.StorageConnectionString))
{
connection.Open();
string 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"].ToString() + rdr["Date"].ToString() + rdr["Open"].ToString() + rdr["High"].ToString() + rdr["Low"].ToString() + rdr["Volume"].ToString() + rdr["Adj_Close"].ToString() + rdr["Close"].ToString());
}
}
connection.Close();
}
}
}
}