#c# #excel
#c# #excel
Вопрос:
может ли кто-нибудь узнать, почему я получаю эту ошибку? я пометил его там, где я получаю ошибку
public string ExportRecords(string query, string sheetname)
{
string filename = "";
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable(sheetname);
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["KMFConnectionString"].ToString());
con.Open();
string sql = query;
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter adptr = new SqlDataAdapter();
adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();
ds.Tables.Add(dt);
string connstr = connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" orgrepository.OrganizationMetaValueByKey("KMFFileDownloadPath") filename "; Extended Properties=Excel 8.0";
OleDbConnection connection = new OleDbConnection(connstr);
using (OleDbCommand commands = connection.CreateCommand())
{
commands.CommandText = "CREATE TABLE [Sheet20] (F1 number, F2 char(255), F3 char(128))";
commands.ExecuteNonQuery(); ****getting error here****
for (int i = 1; i <= 20; i )
{
commands.CommandText = "INSERT INTO [Sheet20] (F1, F2, F3) VALUES(1,"Fake Record","Fake Record")";
commands.ExecuteNonQuery();
}
}
if (dt.Rows.Count > 0)
{
//filename = sheetname DateTime.Today.Day.ToString() DateTime.Today.Month.ToString() DateTime.Today.Year.ToString() DateTime.Now.Hour.ToString() DateTime.Now.Minute.ToString() DateTime.Now.Second.ToString() DateTime.Now.Millisecond.ToString() ".xlsx";
filename = sheetname "-output" ".xls";
ExcelLibrary.DataSetHelper.CreateWorkbook(orgrepository.OrganizationMetaValueByKey("KMFFileDownloadPath") filename, ds);
// connection.Close();
}
return filename;
}
Комментарии:
1. Где вы открыли соединение с помощью OleDbConnection?
2.
string connstr = connstr = ...
просто нужно бытьstring connstr = ...
3. Вы открыли свое SqlConnection, но не ваше OleDbConnection. Кроме того, оберните вещи в
using
блоки…
Ответ №1:
Вам нужно открыть и закрыть соединение следующим образом
using (OleDbConnection connection = new OleDbConnection(connstr))
{
connection.Open();
using (OleDbCommand commands = connection.CreateCommand())
{
//snip
}
}
Ответ №2:
Вы не вызывали, connection.Open()
чтобы открыть соединение, которое пытаетесь использовать.
Ответ №3:
Ваше соединение закрыто, попробуйте команду Open и обработайте ошибки, если таковые имеются.
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
// The insertSQL string contains a SQL statement that
// inserts a new row in the source table.
OleDbCommand command = new OleDbCommand(insertSQL);
// Set the Connection to the new OleDbConnection.
command.Connection = connection;
// Open the connection and execute the insert command.
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
// The connection is automatically closed when the
// code exits the using block.
}