SqlCommand cmd = new SqlCommand(); cmd.CommandText = "select top 10 工件材料,主偏角,前角,刀具直径,刀齿数,铣削速度,铣削深度,进给量 from 加工实例数据.dbo.铣刀实例 where 加工方式=@加工方式 and 刀具材料=@刀具材料 and 刀具寿命<>null"; cmd.Connection = conn; SqlParameter parajgfs = new SqlParameter("@加工方式", SqlDbType.VarChar); parajgfs.Value = ddl_jgfs.SelectedValue; cmd.Parameters.Add(parajgfs); SqlParameter paradjcl = new SqlParameter("@刀具材料", SqlDbType.VarChar); paradjcl.Value = ddl_djcl.SelectedValue; cmd.Parameters.Add(paradjcl); SqlDataReader data = cmd.ExecuteReader(); double[,] day1 = new double[10, 8]; while (data.Read()) { for (int i = 0; i < 10; i++) { for (int j = 0; j < 8; j++) { day1[i,j] = Convert.ToDouble(data[i*8+j]); } } } data.Close(); SqlCommand cmd2 = new SqlCommand(); cmd2.CommandText = "select top 10 刀具寿命 from 加工实例数据.dbo.铣刀实例 where 加工方式=@加工方式2 and 刀具材料=@刀具材料2 and 刀具寿命<>null"; cmd2.Connection = conn; SqlParameter parajgfs2 = new SqlParameter("@加工方式2", SqlDbType.VarChar); parajgfs2.Value = ddl_jgfs.SelectedValue; cmd2.Parameters.Add(parajgfs2); SqlParameter paradjcl2 = new SqlParameter("@刀具材料2", SqlDbType.VarChar); paradjcl2.Value = ddl_djcl.SelectedValue; cmd2.Parameters.Add(paradjcl2); SqlDataReader data1 = cmd2.ExecuteReader(); double[,] day2 = new double[10, 1]; while (data1.Read()) { for (int i = 0; i < 10; i++) { day2[i, 0] = Convert.ToDouble(data1[i]); } } data1.Close(); 我的目的是分别将查询结果存入day1和day2两个数组中,但是通过上述代码对数组赋值操作后,数组内的数字都为0? |
|
你这个代码不报错?
在dr里面用双重循环! |
|
没有报错啊,应该怎么写? |
|
// 摘要: // 获取位于指定索引处的列。 // // 参数: // i: // 要获取的列的从零开始的索引。 // // 返回结果: // 作为 System.Object 位于指定索引处的列。 // // 异常: // System.IndexOutOfRangeException: // 传递的索引位于 0 至 System.Data.IDataRecord.FieldCount 的范围之外。 object this[int i] { get; } 除非你没查到数据,否则必定异常 Convert.ToDouble(data[i*8+j])这一段极端情况下就是9*8+7,按你的sql必定异常 |
|
非得用数组?干嘛不用SqlDataAdapter?Fill到一个DataTable里面,然后再去循环或绑定,该有啥就有啥了。
|
|
我这是查出十条数据,每条数据包括8个列,一共80个数据,9*8+7=79,不会报错,我想问为什么数据传递不到数组中? |
|
因为我后面运算要用数组,求问我这个程序哪出问题了? |
|
while (data.Read())每while一次,就会将一行数据填充,也就是你的8列,你还觉得不会报错? |
|
哦,那应该怎么写啊?求指导 |
|
你可以向上面说的,先Fill到DataSet,然后对于DataSet你就可以循环处理了,因为DataTable本质上也是二维表格
|
|
先不吐槽你的data
说说data1的逻辑,应该是这样的 double[,] day2 = new double[100, 10];//100行,10列.这里多少行要根据你数据库里到底有多少行而定,绝对不是10行1列 int rownum=0;//行号,从0开始 while (data1.Read()) { for (int i = 0; i < 10; i++) { day2[rownum, i] = Convert.ToDouble(data1[i]);//填充第rownum行,第i列 } rownum++;//自增,准备填充下一行 } 你之前的逻辑,每次读一行数据,就反复填充到数组里,那么数组里最后当然只剩下最后一行的数据,之前的都被覆盖掉了 |
|
10分 | |
第一个SQL出的结果有80个字段么? 并且全要转成 double 类型值, 太粗暴了
|
|
人笨所以简单粗暴,想不出啥更好的方法 |
|
能不能麻烦帮忙写个小代码学习一下,您这么直接说,我也不懂啊。 |
|
10分 | |
20分 |
string strSQL = "Select * from blah blah"; using (SqlConnection conn = new SqlConnection("ConnectionString")) { conn.Open(); SqlCommand cmd = new SqlCommand(strSQL, conn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); //取出了DataTable该怎么玩就怎么玩吧 } |
那接下来的赋值怎么写?怎么把dt中的数据存入二维数组day1[10,8] |
|
有没有人能写个全的,到底应该怎么实现?跪求,ORZ
|
|
既然已经在datatable里了,你循环datatable计算不就行了
dt.rows[i][j]就是代表第i行第j列的值 不要满脑子只有二维数组 |