Bpalmereng Ответов: 2

Новая ошибка SQL в C# ASP.NET


Первоначальная ошибка была исправлена, теперь ее изменили на....

System.Data.SqlClient.SqlException (0x80131904): невозможно вставить значение NULL в столбец «Id», таблица «C: \ USERS \ BRIAN \ DESKTOP \ WEBSITE (НЕ МЕНЯТЬ) \ THOMAS COUNTY PUBLIC WORKS \ THOMAS COUNTY PUBLIC WORKS \ APP_DATA \ SIGNDATABASE.MDF.dbo.SignDatabase '; столбец не допускает значений NULL. INSERT не работает. Заявление было прекращено. в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection, Action`1 wrapCloseInAction) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, Boolean breakConnection, Action`1 wrapClientInAction) .TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, Boolean, Boolean callerHasConnectionLock asyncClose) в System.Data.SqlClient.TdsParser.TryRun (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) в System.Data.SqlClient. SqlCommand.FinishExecuteReader (SqlDataReader DS, runBehavior runBehavior, String resetOptionsString) на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, runBehavior runBehavior, булева returnStream, булева асинхронные, Int32 тайм-аут, задачи и задачи, булева asyncWrite, SqlDataReader DS, булева describeParameterEncryptionRequest ) в System. Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String метод, завершение TaskCompletionSource`1, тайм-аут Int32, Task & task, Boolean asyncWrite) в System`InternalCompletionCompletionCompletionCompletionCompletionCompletionCompletionCompletionCompletion () String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) в System.Data.SqlClient.SqlCommand.ExecuteNonQuery () в Thomas_County_Public_Works.Sign_Database.Button1_Click (Отправитель объекта, EventArgs Desktop Users (DrianArgs Desktop) в C: \ Изменить) \ Thomas County Public Works \ Thomas County Public Works \ Sign Database.aspx.cs: строка 27 ClientConnectionId: da77b3bd-eef6-46b4-9833-92c9466232e3 Номер ошибки: 515, состояние: 2, класс: 16



Это те исправления, которые я сделал. Но после исправления этих проблем теперь он бросает вышеприведенный код.

namespace Thomas_County_Public_Works
{
    public partial class Sign_Database : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnect"].ConnectionString);
                con.Open();
                string insert = "Insert into SignDatabase([Date],[Road Name],[Location],[Sign ID],[MUTCD],[Code],[Description of Work],[Size Length],[Size Width],[Backing],[Sheeting],[Support Type],[Support Material],[Sign Damage],[Support Damage],[Sign Repair],[Support Repair],[Work Order Number],[Obstruction],[Rating Date],[Sign Condition],[Support Condition],[Background Reflectivity],[Text Symbol Reflectivity],[Large Sign],[Mounted Overhead],[No Reflectivity Taken]) values(@Date,@RoadName,@Location,@SignID,@MUTCD,@Code,@DescriptionofWork,@SizeLength,@SizeWidth,@Backing,@Sheeting,@SupportType,@SupportMaterial,@SignDamage,@SupportDamage,@SignRepair,@SupportRepair,@WorkOrderNumber,@Obstruction,@RatingDate,@SignCondition,@SupportCondition,@BackgroundReflectivity,@TextSymbolReflectivity,@LargeSign,@MountedOverhead,@NoReflectivityTaken)";
                SqlCommand cmd = new SqlCommand(insert, con);
                cmd.Parameters.AddWithValue("@Date", TextBox1.Text);
                cmd.Parameters.AddWithValue("@RoadName", TextBox3.Text);
                cmd.Parameters.AddWithValue("@Location", TextBox2.Text);
                cmd.Parameters.AddWithValue("@SignID", TextBox4.Text);
                cmd.Parameters.AddWithValue("@MUTCD", TextBox5.Text);
                cmd.Parameters.AddWithValue("@Code", DropDownList1.Text);
                cmd.Parameters.AddWithValue("@DescriptionofWork", TextBox6.Text);
                cmd.Parameters.AddWithValue("@SizeLength", TextBox7.Text);
                cmd.Parameters.AddWithValue("@SizeWidth", TextBox8.Text);
                cmd.Parameters.AddWithValue("@Backing", DropDownList2.Text);
                cmd.Parameters.AddWithValue("@Sheeting", DropDownList3.Text);
                cmd.Parameters.AddWithValue("@SupportType", DropDownList4.Text);
                cmd.Parameters.AddWithValue("@SupportMaterial", DropDownList5.Text);
                cmd.Parameters.AddWithValue("@SignDamage", DropDownList6.Text);
                cmd.Parameters.AddWithValue("@SupportDamage", DropDownList7.Text);
                cmd.Parameters.AddWithValue("@SignRepair", DropDownList8.Text);
                cmd.Parameters.AddWithValue("@SupportRepair", DropDownList9.Text);
                cmd.Parameters.AddWithValue("@WorkOrderNumber", TextBox9.Text);
                cmd.Parameters.AddWithValue("@Obstruction", TextBox10.Text);
                cmd.Parameters.AddWithValue("@RatingDate", TextBox11.Text);
                cmd.Parameters.AddWithValue("@SignCondition", DropDownList10.Text);
                cmd.Parameters.AddWithValue("@SupportCondition", DropDownList11.Text);
                cmd.Parameters.AddWithValue("@BackgroundReflectivity", TextBox12.Text);
                cmd.Parameters.AddWithValue("@TextSymbolReflectivity", TextBox13.Text);
                cmd.Parameters.AddWithValue("@LargeSign", DropDownList12.Text);
                cmd.Parameters.AddWithValue("@MountedOverhead", DropDownList13.Text);
                cmd.Parameters.AddWithValue("@NoReflectivityTaken", DropDownList14.Text);
                cmd.ExecuteNonQuery();
                con.Close();
            }

            catch (Exception ex)
            {
                Response.Write(ex);
            }
        }
    }
}


Что я уже пробовал:

Я пробовал следить за этим видео

Соединение с базой данных (SQL server database) в ASP.NET использование Visual Studio 2012-15-YouTube[^]

NotPolitcallyCorrect

Уберите пробелы из имен параметров. И прекратите использовать имена элементов управления по умолчанию для ваших элементов управления.

CHill60

Вот оно, решение!

2 Ответов

Рейтинг:
13

OriginalGriff

Вы не можете просто поставить пробелы в именах переменных на любом языке, который я знаю: и параметры SQL ничем не отличаются. Изменить это:

... @MUTCD,@Code,@Description of Work,@Size Length, ...
до настоящего времени:
... @MUTCD,@Code,@DescriptionOfWork,@SizeLength, ...
И сделайте то же самое для всех остальных параметров.
Затем сделайте соответствующие имена, когда вы устанавливаете значения;
...
                cmd.Parameters.AddWithValue("@DescriptionOfWork", TextBox6.Text);
                cmd.Parameters.AddWithValue("@SizeLength", TextBox7.Text);
                cmd.Parameters.AddWithValue("@SizeWidth", TextBox8.Text);
...


Кстати: сделайте себе одолжение и перестаньте использовать имена Visual Studio по умолчанию для всего - вы можете помнить, что" TextBox8 " - это номер мобильного телефона сегодня, но когда вам придется изменить его через три недели, вы тогда это сделаете? Используйте описательные имена - например, "tbMobileNo" - и ваш код станет легче читать, более самодокументируемым, более легким в обслуживании-и на удивление быстрее кодировать, потому что Intellisense может добраться до" tbMobile "за три нажатия клавиш, где" TextBox8 " занимает размышление и 8 нажатий клавиш...


Bpalmereng

Я изменил эти вещи, но теперь он бросает код для моего поля (ID), которое является первичным ключом и изменяется по мере вставки данных. По какой-то причине он пытается вернуться как null, даже если новая строка должна изменить его на следующий номер строки. Кроме того, я приношу свои извинения за новые ошибки. Я только недавно начал кодировать, и все это самоучка.

OriginalGriff

Вы не можете установить значение поля ID, если оно задано как значение IDENTITY - SQL позаботится об этом за вас.
Поскольку этот код не пытается установить столбец ID, скорее всего, вы неправильно установили столбец в БД: используйте SQL Server Management Studio (известную как SSMS) для проверки дизайна таблицы. Ваш столбец ID должен иметь "Identity Yes "или" Identity True " - и значения первичного ключа не могут быть обнулены, поэтому проверьте также, что вы установили первичный ключ в столбце ID.

Bpalmereng

Спасибо!

OriginalGriff

Пожалуйста!

Рейтинг:
1

Karthik_Mahalingam

space не допускается для командных параметров

cmd.Parameters.AddWithValue("@Road Name", TextBox3.Text);

удалите место для всех параметров и попробуйте. это должно сработать
cmd.Parameters.AddWithValue("@RoadName", TextBox3.Text);


аналогично для всех значений
values(@Date,@Road Name
,
измените его на
values(@Date,@RoadName,