nicknight 0 / 0 / 0 Регистрация: 11.10.2012 Сообщений: 9 |
||||
1 |
||||
.NET 3.x 21.05.2014, 22:36. Показов 5939. Ответов 11 Метки нет (Все метки)
Всем привет. Собственно, сабж. Вылезает ошибка error CS1503 в 7 строчке:
До этого все выполнялось, и string, который возвращает addString.Data, спокойно преобразовывался в T, пока я не заставил формы работать с неопределенными типами. Либо как-то не так заставил
__________________
0 |
Psilon Master of Orion 6094 / 4950 / 905 Регистрация: 10.07.2011 Сообщений: 14,522 Записей в блоге: 5 |
||||
22.05.2014, 00:10 |
2 |
|||
nicknight, потому что компилятор не умеет преобразовывать произвольный тип в строку?..
костыль, но будет работать.
0 |
0 / 0 / 0 Регистрация: 11.10.2012 Сообщений: 9 |
|
22.05.2014, 07:41 [ТС] |
3 |
Psilon, так мне нужно наоборот — string в произвольный тип. Не работает костыль.
0 |
647 / 582 / 170 Регистрация: 17.07.2012 Сообщений: 1,649 Записей в блоге: 1 |
|
22.05.2014, 08:29 |
4 |
Так что есть Т то у вас когда вы ошибку получаете?
0 |
nicknight 0 / 0 / 0 Регистрация: 11.10.2012 Сообщений: 9 |
||||
22.05.2014, 09:24 [ТС] |
5 |
|||
Cupko,
проходит.
0 |
Psilon Master of Orion 6094 / 4950 / 905 Регистрация: 10.07.2011 Сообщений: 14,522 Записей в блоге: 5 |
||||
22.05.2014, 10:54 |
6 |
|||
nicknight, ну тогда делай так:
т.к. на запись if (yo is string) компилятору вообще плевать.
0 |
Cupko 647 / 582 / 170 Регистрация: 17.07.2012 Сообщений: 1,649 Записей в блоге: 1 |
||||
22.05.2014, 11:00 |
7 |
|||
Я не понимаю ничего…
yo — пустая ссылка, yo is string что возвратит? это вообще компилиться будет?
0 |
0 / 0 / 0 Регистрация: 11.10.2012 Сообщений: 9 |
|
22.05.2014, 11:26 [ТС] |
8 |
Psilon, так и было до этого. Но я хочу чтобы не только со стрингами работало. Добавлено через 2 минуты
0 |
kolorotur 16930 / 12507 / 3286 Регистрация: 17.09.2011 Сообщений: 20,744 |
||||
22.05.2014, 11:52 |
9 |
|||
Я так понимаю, addString.Data — это строка.
0 |
0 / 0 / 0 Регистрация: 11.10.2012 Сообщений: 9 |
|
23.05.2014, 10:33 [ТС] |
10 |
Видимо, придется как-то по-другому кумекать. Буду разбираться с преподом. Всем спасибо!
0 |
647 / 582 / 170 Регистрация: 17.07.2012 Сообщений: 1,649 Записей в блоге: 1 |
|
23.05.2014, 12:53 |
11 |
А если Т стрингой ограничить?
0 |
Master of Orion 6094 / 4950 / 905 Регистрация: 10.07.2011 Сообщений: 14,522 Записей в блоге: 5 |
|
23.05.2014, 15:43 |
12 |
Cupko, то смысл в нем?..
0 |
- Remove From My Forums
-
Question
-
Hello
I’ve got a project that is giving me build errors in VS2017, however it’s been building without errors in 2013
In this project C# I am using a vendor DLL that has a function signature of
VendorMethod(DoubleWaveform, int, int[*], double, VendorAssembly.DesiredUnits, double, double, double, Vendor.Assembly.UnitLabels, vendorAssemblyComplexSpectrum, vendorAssembly.Element[*], int, string)
The errors are
Argument 3 cannot convert from int[] to int[*] \ my declaration is int[] data = {1,2,3,4,5 };
Arugment 11 cannot convert from out vendorAssembly.Element[] to out vendorAssembly.Element[*]
\my declaration is vendorAssembly.Element[] Elements;This builds without errors in 2013, is there something within 2017 properties that I can change?
Прежде чем ответить, я снова и снова проверял свой код, а также около часа искал похожий ответ. Компилятор продолжает выдавать ошибку CS1503, я не совсем уверен, как это исправить. Это строки 36 и 37, и я прокомментировал строки с ошибками 36 и 37. Он предназначен для базы данных, которая должна искать номерной знак и выводить другие данные в таблицу.
public partial class Login : Form
{
string connectionString = @"Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=J:Plate ReaderDBInfoDB.mdf;Integrated Security=True;Connect Timeout=30";
SqlDataReader mdr;
public Login()
{
InitializeComponent();
}
private void btnSearch_Click(object sender, EventArgs e)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
string selectQuery = "SELECT * From Plate WHERE Plate='" + txtPlate.Text;
SqlCommand command = new SqlCommand(selectQuery, sqlCon);
mdr = command.ExecuteReader();
if (mdr.Read())
{
labelName.Text = mdr.GetString("Name"); //Right here
labelWanted.Text = mdr.GetInt32("Bounty").ToString(); //and here
}
else
{
MessageBox.Show("No Data For This Plate");
}
}
}
}
3 ответа
Лучший ответ
Как объяснено в комментариях, GetString также GetInt32 требует параметр типа integer. Это целое число — позиция поля в списке выбора полей. Если вы не хотите использовать позицию, вы можете написать
labelName.Text = mdr.GetString(mdr.GetOrdinal("Name"));
И эту простую строку можно легко преобразовать в метод расширения, добавив метод в статический класс, чей код
public static class ReaderExtensions
{
public static string GetString(this SqlDataReader source, string fieldName)
{
return source.GetString(source.GetOrdinal(fieldName));
}
}
И это, наконец, позволяет писать
string labelText = mdr.GetString("Name");
Конечно, то же самое можно написать и для GetInt32, который принимает имя поля. Кстати, если я не ошибаюсь, версия MySql имеет эти перегрузки прямо в сборке
4
Steve
29 Дек 2018 в 19:33
GetInt32 ожидает параметр ‘int’.
Вы передаете в строке.
Вам необходимо отправить в порядковую позицию ваших столбцов.
Используйте это вместо:
mdr.GetInt32(mdr.GetOrdinal("Name"));
Возможно, вы захотите использовать микро ORM, например Dapper, чтобы упростить процесс.
1
KSK
29 Дек 2018 в 19:46