Добавление данных в файл 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 - я почти уверен, что ваши данные там.

На мой взгляд, реальным решением было бы

  1. установить SQL Server Express (и вы уже сделали это в любом случае)

  2. установить SQL Server Management Studio Express

  3. создайте свою базу данных в SSMS Express, дайте ей логическое имя (например, Storage)

  4. подключитесь к нему, используя его логическое имя базы данных (заданное при его создании на сервере), и не связывайтесь с физическими файлами базы данных и пользовательскими экземплярами. В этом случае ваша строка подключения будет выглядеть примерно так:

    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();
        }
    }
}
}
Другие вопросы по тегам