#c# #sql #database #datatable #create-table
#c# #sql #База данных #datatable #создать таблицу
Вопрос:
Я пытаюсь программно создать таблицу SQL. Я могу создать таблицу с помощью запроса, это вообще не проблема. Но я бы хотел, чтобы имя таблицы имело некоторое отношение к вставленным в него данным, поскольку оно используется для предложений и счетов-фактур. В него будут вставлены данные, введенные из DataGridView (возможно, с помощью bulkcopy или чего-то подобного).
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE table1' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
работает отлично. Однако я бы хотел, чтобы этот код работал:
using (SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|LWADataBase.sdf"))
{
con.Open();
try
{
string tableName = "" quotenameTxt.Text "-" firstTxt.Text "-" surenameTxt.Text;
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE '" tableName.ToString() "' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
{
command.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Есть предложения? Я получаю сообщение об ошибке (как и ожидалось), но не уверен, что мне нужно делать.
Я использую SqlCe (и прежде чем кто-нибудь скажет «BulkCopy не поддерживается», я знаю, у меня есть ссылка, которая позволяет это)
Ошибка, которую я получаю, :
Произошла ошибка при разборе запроса. [Номер строки токена = 1, смещение строки токена = 16, ошибка токена = 1-2-3 ]
// «1-2-3» — значения текстового поля.
Комментарии:
1. Какую ошибку вы получаете? Что-то насчет неправильного синтаксиса?
2. Произошла ошибка при разборе запроса. [Номер строки токена = 1, смещение строки токена = 16, ошибка токена = 1-2-3 ] // «1-2-3» — значения текстового поля.
3. Сначала выполните отладку и проверьте, каково значение
string tableName
параметра. Во-вторых, посколькуtableName
already — это строка, вам не нужно вызывать.ToString()
ее.4. У меня он отображается в окне сообщения как 1-2-3. (Значения из текстовых полей в форме) я удалил
.ToString()
и все равно получаю ту же ошибку5. Замените тире на подчеркивание или заключите все название таблицы в [квадратные скобки] .
Ответ №1:
Замените тире на подчеркивание или заключите все имя таблицы в [квадратные скобки]
Комментарии:
1.
[]
разобрался с проблемой.
Ответ №2:
Как упоминалось в комментариях выше, внесите следующие изменения:
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE '" tableName "' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
tableName
это уже строка. Нет необходимости использовать .ToString()
его.
Кроме того, у вас есть начальный пробел в вашем объявлении tableName
:
string tableName = "" quotenameTxt.Text "-" firstTxt.Text "-"
surenameTxt.Text;
Это создает строку «1-2-3», а не «1-2-3», которую вы ожидаете.
Наконец, окружите свой tableName
с []
, чтобы заставить его работать правильно:
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE '[" tableName "]' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
Комментарии:
1. Отличное описание. Упрощает понимание. Теперь, чтобы найти способ отображения всех таблиц из базы данных в виде списка или чего-то подобного.