Создание массива точек из базы данных SQL Server c # - PullRequest
0 голосов
/ 22 февраля 2012

Я новичок в c # и сохранил позиции объекта в базе данных SQL Server. Я написал запрос для выбора местоположения объектов из базы данных и теперь хочу заполнить массив этими.

У меня возникли проблемы с ошибками типа «невозможно преобразовать объект в точку» и т. Д., И я не могу понять, как заполнить массив типом данных точки.

Может ли кто-нибудь помочь мне с этим?

Текущий код:

 try
 {
    consecond.Open(); //Opens the connection
    SqlDataReader dr = com_getposition.ExecuteReader();
    int i = 0;
    object[] arrayreturn = new object[10];
    while (dr.Read())
    {
        arrayreturn[i] = dr["POSITION"];
        i++;
    }
    p1.Location = (Point)arrayreturn[0];
    dr.Close();
 }
 finally
 {
     consecond.Close(); //Closes the connection
 }

Спасибо

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Если POSITION имеет тип nvarchar, вам нужно проанализировать его (не приведение) к правильному типу.

var str = (string)dr["POSITION"];
var i = str.IndexOf(',', 3);
var x = int.Parse(str.Substring(3, i  - 3));
var y = int.Parse(str.Substring(i + 3, str.Length - (i + 4)));
p1.Location = new Point(x, y);
0 голосов
/ 22 февраля 2012

Магнус верен, но лично я предпочитаю что-то вроде этого:

Int32 n;
bool b = Int32.TryParse(arrayreturn[0].ToString(), out n);
if (b)
    p1.Location = n;

Если location является точкой, то вы можете изменить это:

Int32 x;
Int32 y;

bool b = Int32.TryParse(arrayreturn[0].ToString(), out x);
if (b) {
    b = Int32.TryParse(arrayreturn[1].ToString(), out y);
    if (b) {
        p1.Location = new Point(x, y);
        return;
    }
}

// put error-handling code here
...