Sql Соединение не вставляет данные - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я работаю над написанием программы регистрации ошибок, которая будет принимать строку подключения и имя таблицы и вставлять данные, предоставленные мной из других программ, в базу данных. Однако проблема, с которой я сталкиваюсь, заключается в том, что мой метод не возвращает никаких значений и ничего не загружается в базу данных. Это также стандартная библиотека классов

public string ErrorLevelOne(string ConnectionString, string TableName, string ProjectName, string exception, string stackTrace)
        {
            try
            {
                SqlConnection conn = new SqlConnection(ConnectionString);
                conn.Open();
                string query = "INSERT INTO" + TableName + "(ErrorType, StackTrace, OccuranceTime)";
                query += "Values (@ErrorType, @StackTrace, @OccuranceTime, @ProjectName)";
                SqlCommand command = new SqlCommand(query, conn);
                command.Parameters.AddWithValue("@ErrorType", exception);
                command.Parameters.AddWithValue("@StackTrace", stackTrace);
                command.Parameters.AddWithValue("@OccuranceTime", DateTime.Now);
                command.Parameters.AddWithValue("@ProjectName", ProjectName);
                command.ExecuteNonQuery();
                conn.Close();

                return "Error has been posted into the database";
            }
            catch(Exception err)
            {
                Debug.WriteLine("Error in connecting or inserting  data into " + TableName + ": " + err.Message);
                return "Error hasn't been posted into the database";
            }
        }

Любая помощь или предложения будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Посмотрите на сообщение об исключении. Ваш SQL неправильный - отсутствует пробел:

string query = "INSERT INTO " + TableName + @"(ErrorType, StackTrace, OccuranceTime)
Values (@ErrorType, @StackTrace, @OccuranceTime, @ProjectName)";

Видите пробел после INTO? Как примечание, обычно плохая идея параметризовать имя таблицы; это кажется очень ... необычным. Если вы должны сделать это, возможно, стоит сравнить его со списком известных разрешенных значений (или, возможно, взять enum в API и беспокоиться об имени внутри метода), и вы также следует использовать синтаксис []:

string tableName  = GetTableName(errorTableEnumThing);
string query = "INSERT INTO [" + tableName + @"](ErrorType, StackTrace, OccuranceTime)
Values (@ErrorType, @StackTrace, @OccuranceTime, @ProjectName)";
1 голос
/ 07 апреля 2020

Я хотел написать комментарий, но репутации недостаточно, извиняюсь. В этой строке у вас нет пробелов перед переменной TableName

"INSERT INTO" + TableName + "(ErrorType, StackTrace, OccuranceTime)";

В конце вы получите его

"INSERT INTOTableName (ErrorType ... '

Кроме того, у вас нет квадратных скобок '[~]' в спецификации таблицы

@"INSERT INTO [ {TableName} ]..."

Также проверьте вашу строку подключения на наличие ошибок, а catch что-нибудь бросает?

Если это не поможет, напишите, я постараюсь помочь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...