Передача проанализированных строк в базу данных сервера sql - PullRequest
0 голосов
/ 01 марта 2012

У меня есть эта программа, которая передает мне данные. Я беру эти данные (строку) и анализирую их, чтобы различные поля могли войти в соответствующий столбец таблицы БД. Я могу разобрать строку, но не могу найти правильную функцию или способ отправить их в БД. Это мой второй опыт работы с sql сервером или базой данных в целом. Я сделал вставки таким образом

MyCommand.CommandType = System.Data.CommandType.Text; MyCommand.CommandText = "INSERT INTO TimeStampTable(ID, TimeStamp) VALUES ('24', 'sep 13, 2009')";

Из того, что я знаю, CommandType допускает только текст или хранимую процедуру. В этом случае я бы хотел вставить строку, которая анализируется.

string teststring = dtString;
string[] result = teststring.Split(',', ' ', ':', '=');
Console.WriteLine("The parsed string looks like this:");
foreach (string word in result)
{
    Console.WriteLine(word);
}

Это мой код, который анализирует мою входящую строку. Таким образом, я получаю имя адреса в формате zip и т. Д. Я хотел бы, чтобы имя указывало на col1, адрес - на col2 и т. Д. Я думаю, что идеальный способ сделать это - преобразовать мой цикл во что-то подобное

foreach (string word in result)
{
    SqlDatasource.InsertCommand=Insert into Tablename col1 col2 col3(word);
}

У кого-нибудь есть предложения?

1 Ответ

1 голос
/ 01 марта 2012

Я отвечу на ваш вопрос напрямую, но есть много разных способов сделать то же самое (я перечислю некоторые в конце)

String insertQuery = "INSERT INTO TABLENAME (Col1, Col2, Col3...) VALUES (";
//This is also assuming that your data is in the same order as the columns
int isFirstLoop = true
foreach(string word in result)
{
    if(!isFirstLoop)
        insertQuery += ","
    insertQuery += word;
    isFirstLoop = false;        
}
insertQuery += ")";
SqlDataSource.InsertCommand = insertQuery;

ПРИМЕЧАНИЕ: это очень открыто для SQL-инъекции , так что имейте это в виду (доверяете ли вы своему входящему источнику). Существуют способы очистки данных, но в конечном итоге я предлагаю некоторые из методов, перечисленных ниже

Альтернативы:

  • Использовать хранимую процедуру поверх прямого TSQL. Затем вы можете сопоставить свои данные с SQLParameters, которые (я считаю) созданы для очистки данных для защиты от SQL-инъекций
  • Используйте очень простые ORM и / или LINQ, чтобы вы могли работать с объектами напрямую. Тогда вам нужно только прочитать данные в POCO
  • Я уверен, что есть и другие способы, однако по какой-то причине я рисую пробел. Я думаю, что это потому, что это наиболее используемые альтернативы:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...