Я беру 100 + таблицы из базы данных SQL и записываю все данные в 1 файл. В SQL я запускал сложный запрос для форматирования таблиц в одно представление. В VS я подключаюсь к SQL и выбираю * из представления и используя String Builder для создания файла.C# Строить очень большой текстовый файл из SQL-запроса
Это работает, если я получаю только 5% данных и аварийно завершает работу с исключением памяти, если попытаюсь захватить 100%. У просмотра 10 миллионов записей. Я ищу совет. Благодарю.
string cs4 = ConfigurationManager.ConnectionStrings["example"].ConnectionString;
StringBuilder sb4 = new StringBuilder();
using (SqlConnection con4 = new SqlConnection(cs4))
{
string strTQuery = @"SELECT * FROM [dbo].[view]";
SqlDataAdapter da4 = new SqlDataAdapter(strTQuery, con4);
DataSet ds4 = new DataSet();
da4.Fill(ds4);
ds4.Tables[0].TableName = "Example";
foreach (DataRow exDR in ds4.Tables["Example"].Rows)
{
sb4.Append(exDR["A"].ToString() + strDelimiter);
sb4.Append(exDR["B"].ToString() + strDelimiter);
sb4.Append(exDR["C"].ToString() + strDelimiter);
sb4.Append(exDR["D"].ToString());
sb4.Append("\r\n");
}
}
StreamWriter file4 = new StreamWriter(@"\\Desktop" + todaysDate + ".csv");
file4.WriteLine(sb4.ToString());
file4.Close();
Запись в файл, как вы читаете из результата - вы пытаетесь засунуть все эти данные в строку в памяти, только запись в файл в конце. Я предполагаю, что у вас гораздо меньше памяти, чем у вас есть данные. –
@DStanley - не будет ли DataSet хранить все данные? Jay - Возможно, используя 'SqlDataReader' и делая, как сказал DStanley, и запись в файл по мере чтения будет работать лучше. –