2012-02-21 73 views
0

我对c#很新,并且已经存储了SQL Server数据库中对象的位置。我写了一个查询来选择数据库外的对象位置,现在想用这些查询来填充一个数组。从SQL Server数据库c创建一个点数组#

我遇到了'你不能将对象转换为点'等错误,我无法弄清楚如何用点数据类型填充数组。

任何人都可以帮助我吗?

当前代码:

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 
} 

感谢

+1

我们看一些代码。 – jason 2012-02-21 21:11:58

+0

请提供您到目前为止编写的代码 – northpole 2012-02-21 21:12:30

+1

sql查询中的'POSITION'是什么类型? – Magnus 2012-02-21 21:21:17

回答

1

如果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

数据在数据库中存储(如视觉演播室显示):{X = 390,Y = 197}“ – Mike91 2012-02-21 21:29:23

+0

感谢这么多magnus,此代码运行良好 – Mike91 2012-02-21 22:03:30

+0

没问题,我看到这是你的第一个问题,别忘了接受答案 – Magnus 2012-02-21 22:06:27

0

马格努斯是正确的,但我个人更喜欢这样的事情:

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 
+0

感谢您的反馈egrunin,非常感谢! – Mike91 2012-02-21 22:03:39