Bạn đã thoát đúng cách tên tệp db nhưng không phải nguồn dữ liệu, do đó, nó cố gắng kết nối với nguồn dữ liệu có tên "(localdb) 11.0", (rất có thể) không tồn tại.
Hãy thử thoát nó đúng cách như thế này:
SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
"Initial Catalog=MyDB; Integrated Security=True; "+
"MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");