Экспорт пустых значений БД в Excell
Я пытаюсь экспортировать данные, которые я заполнил из запроса, однако я получаю исключение с сообщением "Недопустимое значение ячейки" в последней строке.
Кажется, это происходит только тогда, когда столбец содержит нулевые значения. Как я могу изменить свой datatable, чтобы заменить нулевые значения строкой или записать нулевое значение в файл Excel, как пустое место.
Это код, который у меня есть:
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
OracleDataAdapter adptr = new OracleDataAdapter();
try {
con.Open();
var oracmd = con.CreateCommand();
oracmd.CommandText = "select Column1,Column2 from Test";
adptr.SelectCommand = oracmd;
adptr.Fill(dt);
con.Close();
ds.Tables.Add(dt);
SaveFileDialog saveFileDialog1 = new SaveFileDialog
{
Filter = "Excell files (*.xls)|*.xls";
RestoreDirectory = true;
};
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
ExcelLibrary.DataSetHelper.CreateWorkbook(saveFileDialog1.FileName, ds);
1 ответ
Я использую этот метод, чтобы проверить DataSet
для нулевого значения и заменить их:
public static DataSet DBNull(DataSet dataSet)
{
try
{
foreach (DataTable dataTable in dataSet.Tables)
foreach (DataRow dataRow in dataTable.Rows)
foreach (DataColumn dataColumn in dataTable.Columns)
if (dataRow.IsNull(dataColumn))
{
if (dataColumn.DataType.IsValueType) dataRow[dataColumn] = Activator.CreateInstance(dataColumn.DataType);
else if (dataColumn.DataType == typeof(bool)) dataRow[dataColumn] = false;
else if (dataColumn.DataType == typeof(Guid)) dataRow[dataColumn] = Guid.Empty;
else if (dataColumn.DataType == typeof(string)) dataRow[dataColumn] = string.Empty;
else if (dataColumn.DataType == typeof(DateTime)) dataRow[dataColumn] = DateTime.MaxValue;
else if (dataColumn.DataType == typeof(int) || dataColumn.DataType == typeof(byte) || dataColumn.DataType == typeof(short) || dataColumn.DataType == typeof(long) || dataColumn.DataType == typeof(float) || dataColumn.DataType == typeof(double)) dataRow[dataColumn] = 0;
else dataRow[dataColumn] = null;
}
return dataSet;
}
catch (Exception ex)
{
return dataSet;
}
}