Не удалось выполнить преобразование при преобразовании значения 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
Хорошо. Я дал ему попробовать, и все скопировано, но появляется та же ошибка.