Computer Wiz99 Ответов: 1

Не удалось выполнить преобразование при преобразовании значения nvarchar 'xxxxxx' в тип данных int.


У меня есть сервер SQL 2005. Я получаю ошибку, которая говорит: преобразование не удалось при преобразовании значения nvarchar 'xxxxxx' в тип данных int. Есть ли способ исправить эту ошибку?

Server Error in '/' Application.
Conversion failed when converting the varchar value 'Abilene Christian University                                                                                                                                                                                                                                   ' to data type int.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Conversion failed when converting the varchar value 'Abilene Christian University                                                                                                                                                                                                                                   ' to data type int.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[SqlException (0x80131904): Conversion failed when converting the varchar value 'Abilene Christian University                                                                                                                                                                                                                                   ' to data type int.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1753986
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5296058
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +558
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682
   System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows) +342
   System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more) +227
   System.Data.SqlClient.SqlDataReader.Read() +34
   System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) +64
   System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) +148
   System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) +421
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +173
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +316
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +86
   System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1482
   System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +101
   System.Web.UI.WebControls.ListControl.PerformSelect() +34
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +105
   System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +23
   System.Web.UI.Control.PreRenderRecursiveInternal() +83
   System.Web.UI.Control.PreRenderRecursiveInternal() +168
   System.Web.UI.Control.PreRenderRecursiveInternal() +168
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +974


Код ASPX:
 <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                
                    ConnectionString="<%$ ConnectionStrings:PasswordConnectionString %>" 
                    SelectCommand="SELECT * FROM [TableCOCINST] WHERE LongName = INST_ID">

        <SelectParameters>
  <asp:SessionParameter
    Name="INST_ID"
    SessionField="INST_ID"
    DefaultValue="5" />
</SelectParameters>
                </asp:SqlDataSource>

Sergey Alexandrovich Kryukov

Почему, почему вы храните целочисленные данные в виде символов в первую очередь? Если вам нужно хранить целые числа, храните целые числа.
И какой смысл показывать сообщение об ошибке без вашего кода?
Вероятно, я напрасно трачу свое время, объясняя, что не так с вашими постами: вы уже задали 62 вопроса, и я думаю, что есть еще несколько, которые были удалены из-за сообщений о злоупотреблениях. Могут ли ответы и комментарии научить вас чему-нибудь вообще?
—СА

Computer Wiz99

Yes I have learned a lot in here. The thing is that I am working with an old system here. Can't upgrade or anything. So I have to ask questions because I really don't like to go back down on tech. when the next best thing is out there and can do the things I need without looking so hard for it. I got all of the data from an excel spreed sheet. I just imported it. The database is FoxPro. If I knew FoxPro it would be easy to do this work. I am converting FoxPro database to SQL and the only way is to export to an excel file. That is with the tech. I have to work with. The only thing that is somewhat new is VS2010. And I am the only Programmer in this company trying to make things work for them with what they have.

Sergey Alexandrovich Kryukov

Квези, когда я говорил об обучении, я не имел в виду, что ты делаешь что-то не так в своей работе; в этой связи я имел в виду то, как ты задаешь вопросы. Вы могли бы научиться предоставлять существенные детали...
Удачи,
—СА

Richard MacCutchan

Да, изучите разницу между символьными данными и целыми числами.

ZurdoDev

Итак, исправьте SQL. Где ты застрял?

Computer Wiz99

Я попробовал сделать это, и он не сделал бы этого на сервере. Я даже попытался создать новую таблицу, а затем импортировать данные, но все равно безуспешно. Единственный способ, который я могу придумать, - это сделать новую таблицу и ввести каждую запись вручную, но это займет дни и месяцы. Всего в одной таблице содержится около 1287 записей. 58 колонок. На самом деле у меня нет времени печатать все это в каждой таблице. А это 18 столов. :0

ZurdoDev

Какие шаги вы делаете?

Computer Wiz99

В SQL Server 2005 или Visual Studio 2010?

ZurdoDev

На самом деле вы не объяснили, как вы это делаете. Что ты делаешь?

Computer Wiz99

Хорошо. У меня есть выпадающий список, который привязан к данным на SQL-сервере. Я пытался заполнить ddl только тогда, когда пользователь вошел в систему. Прямо сейчас все пользователи могут видеть информацию каждого пользователя. Я пытаюсь заставить пользователя войти в систему, нажать на ссылку для формы, которую он должен заполнить, и ddl заполнит правильные данные только для этого пользователя. Таким образом, он не будет показывать всем данные. Таким образом, в ddl должны быть две вещи. Выберите школу и название школы, соответствующее пользователю. Все пользователи имеют идентификатор пользователя, и школы имеют тот же идентификатор пользователя, который соответствует этому пользователю. Я обновлю код в этом вопросе. Код в aspx-файл.

ZurdoDev

Итак, выберите * из [TableCOCINST], где LongName = INST_ID вызывает ошибку?

Computer Wiz99

Я так думаю. Он работал до того, как я его поменял. Вот старый код, который у меня был.
<asp:SqlDataSource ID="SqlDataSource1" runat="сервер"

ConnectionString="<%$ ConnectionStrings:PasswordConnectionString %>"

Команды selectcommand="выбрать [INST_ID], [LongName] от [TableCOCINST]"&ГТ;

ZurdoDev

Я бы предложил отладить его в SQL и найти, какие данные вызывают его.

Computer Wiz99

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

ZurdoDev

Возможно, тогда не меняйте тип данных, а преобразуйте его при выборе.

RedDk

Это означает, что попытка изменить исходные таблицы и исходную базу данных будет тщетной. Поэтому создайте совершенно новую целевую базу данных/набор таблиц. И используя идиому SELECT/INSERT, через язык TSQL скопируйте все эти данные в (новый) целевой объект из (старого) источника.
[редактировать]
Это было быстро. Я предлагаю вам щелкнуть правой кнопкой мыши таблицу в Обозревателе объектов интерфейса ssmse, выбрать команду создать в буфер обмена и вставить результат этой копии. Прямо здесь.
[конец редактирования]

Computer Wiz99

Хорошо. Я попробую это сделать. Спасибо.

Computer Wiz99

Хорошо. Я дал ему попробовать, и все скопировано, но появляется та же ошибка.

1 Ответов

Рейтинг:
6

OriginalGriff

Скорее всего, вы ленивы: ваш оператор INSERT не перечисляет столбцы, в которые вы хотите поместить данные:

INSERT INTO MyTable VALUES ('a string', 666)
Это означает, что SQL попытается вставить значения в столбцы в том порядке, в котором они определены в базе данных, включая любое поле, которое вы не можете установить, например поле Identity ID - так оно выглядит, говорит, что поле ID является целым числом, и пытается преобразовать вашу строку "Abilene Christian University" в целое число и (совершенно справедливо) терпит неудачу.

Всегда называйте столбцы: это занимает очень мало дополнительного времени, и это делает код намного более надежным!
INSERT INTO MyTable (ColledgeName, AgeOfYoungestMember) VALUES ('a string', 666)


Computer Wiz99

OriginalGriff, что значит вставить. Я сейчас ничего не вставляю. Это для выпадающего списка, над которым я работаю.

OriginalGriff

Итак, вы привязали выпадающий список к таблице SQL (иначе данные клиента SQL не появлялись бы в трассировке стека, которую вы показываете).

Как же так? И что именно вы делаете, когда получаете ошибку? Помните, что я не могу видеть ваш экран или читать ваш жесткий диск, поэтому я понятия не имею, как выглядит ваш код!

Computer Wiz99

Хорошо. У меня есть выпадающий список, который привязан к данным на SQL-сервере. Я пытался заполнить ddl только тогда, когда пользователь вошел в систему. Прямо сейчас все пользователи могут видеть информацию каждого пользователя. Я пытаюсь заставить пользователя войти в систему, нажать на ссылку для формы, которую он должен заполнить, и ddl заполнит правильные данные только для этого пользователя. Таким образом, он не будет показывать всем данные. Таким образом, в ddl должны быть две вещи. Выберите школу и название школы, соответствующее пользователю. Все пользователи имеют идентификатор пользователя, и школы имеют тот же идентификатор пользователя, который соответствует этому пользователю. Я обновлю код в этом вопросе. Код в aspx-файл.

OriginalGriff

Хорошо. Так как же вы его связываете?

Computer Wiz99

Я использую мастер настройки источника данных в VS2010 на стороне формы. Просто перетащите элемент управления SqlDataSource и элемент управления ddl. Я добавил свои данные в элемент управления SDS, а затем привязал их к базе данных ddl. В DDL поле выберите значение из dropdownlist для пользователя. Выберите поле данных, которое будет отображаться в раскрывающемся списке, - это имена школ.